每日两题 / 22. 括号生成 & 54. 螺旋矩阵(LeetCode热题100)

22. 括号生成 - 力扣(LeetCode)
image.png

dfs生成合法的括号序列即可

class Solution {
public:
    vector<string> ans;
    void dfs(int l, int r, int n, string& s)
    {
        if (s.size() == n * 2)
        {
            ans.push_back(s);
            return;
        }

        if (l)
        {
            s += "(";
            dfs(l - 1, r, n, s);
            s.pop_back();
        }
        if (r && r > l)
        {
            s += ")";
            dfs(l, r - 1, n, s);
            s.pop_back();
        }
    }
    vector<string> generateParenthesis(int n) {
        string s; s += "(";
        dfs(n - 1, n, n, s);
        return ans;
    }
};

54. 螺旋矩阵 - 力扣(LeetCode)
遍历方向为右下左上,根据该方向定义dx,dy方向数组
遍历时保存记录,遇到访问过的或者越界,则需要替换方向

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        int dx[4] = { 0, 1, 0, -1 };
        int dy[4] = { 1, 0, -1, 0 };
        int m = matrix.size(), n = matrix[0].size();
        vector<vector<int>> st(m, vector<int>(n, 0));
        int i = 0, j = 0; 
        int d = 0;
        vector<int> ans;
        while (ans.size() != m * n)
        {
            ans.push_back(matrix[i][j]);
            st[i][j] = 1;
            int x = i + dx[d], y = j + dy[d];
            if (x < 0 || x >= m || y < 0 || y >= n || st[x][y]) 
            {
                d ++ ;
                d %= 4;
            }
            i += dx[d], j += dy[d];
        }
        return ans;
    }
};
上一篇:免费的SSL证书


下一篇:结合SOCKS5代理、代理IP与网络安全促进跨界电商和游戏产业发展