Leetcode 题解记录

22. 括号生成

题解: dfs.

1. dfs(string str, int i):  str表示 前  i-1 个 括号组成的合法括号,   i 表示 现在要插入第 i 个小括号  "()",  这里不需要 考虑插入的小括号里面还有小括号,因为这样的操作会在  i+1, i+2, ... 中去尝试.

2. 对于一个合法的括号组合,我们可以在字符串头部, 以及每个左括号的后面添加一个小括号 "()".

3. 结果可能会有重复, 需要去重.

vector<string> generateParenthesis(int n) {
        set<string> _set;
        function<void(string, int)> dfs = [&](string brackets, int level){
            if(!level){
                _set.insert(brackets);
                return;                
            }
            dfs("()" + brackets, level - 1);
            for(int i=0; i<brackets.size(); ++i){
                if(brackets[i] == ‘(‘)
                    dfs(brackets.substr(0,i+1)+"()"+brackets.substr(i+1), level-1);
            }     
        };
        dfs("", n);
        vector<string> ans;
        for(auto str : _set)
            ans.emplace_back(str);
        return ans;
}

  

剑指 Offer 10- I. 斐波那契数列

题解: 斐波那契数列公式 : f[i] = f[i-1] + f[i-2]

1. 注意点: 数论知识 (a + b) mod n == ( a mod n + b mod n ) mod n 

    int fib(int n) {
        long long a[3] = {0, 1, 1};
        if(n <= 2)
            return a[n] % mod;
        for(int i=3; i<=n; ++i){
            a[0] = a[1], a[1] = a[2];
            a[2] = (a[1] + a[0]) % mod; // 注意点: 取余不影响结果
        }
        return a[2];
    }

  

 

Leetcode 题解记录

上一篇:力扣 leetcode 724. 寻找数组的中心索引 (python)


下一篇:[Leetcode724] 力扣724:寻找数组的中心索引