leetcode842 将数组拆成斐波那契数列

2020-04-17  本文已影响0人  奥利奥蘸墨水

题目

将数组拆成斐波那契数列

分析

这道题的思路就是dfs,是男人就该暴力搜索嘛。
要注意的点有以下几个:

代码

class Solution {
private:
    vector<int> res;
    void dfs(long long cur, int k, string s, vector<int>& vec) {
        if (!res.empty() || k > s.size()) {
            return;
        }
        long long n = vec.size();
        if (k == s.size() && n >= 3 && vec[n - 2] + vec[n - 3] == vec[n - 1]) {
            res = vec;
            return;
        }

        for (long long i = k; res.empty() && i < s.size(); i++) {
            if (cur == 0 && s[i] == '0') {
                if (n == 0) {
                    vec.push_back(0);
                    dfs(0, i + 1, s, vec);
                } else if (n < 2 || vec[n - 2] + vec[n - 1] == cur) {
                    vec.push_back(0);
                    dfs(0, i + 1, s, vec);
                    vec.pop_back();
                }
            } else {
                cur = cur * 10 + (s[i] - '0');
                if (cur < 0 || cur > (long long)INT_MAX) {
                    break;
                }
                if (n < 2 || vec[n - 2] == cur - vec[n - 1]) {
                    vec.push_back(cur);
                    dfs(0, i + 1, s, vec);
                    vec.pop_back();
                }
            }
        }
    }
public:
    vector<int> splitIntoFibonacci(string S) {
        vector<int> vec;

        dfs(0, 0, S, vec);
        if (res.empty()) {
            return {};
        }
        return res;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读