• 20.12.8 leetcode842


    题目链接:https://leetcode-cn.com/problems/split-array-into-fibonacci-sequence/

    题意:给你一个数字字符串,问能否把这个数字字符串分成一个斐波那契数列,斐波那契数列的要求是:序列长度大于3、每个数都在int范围内、满足f(n-2)+f(n-1)=f(n)。满足的话输出对应序列块,不满足的话则输出[]。

    分析:用回溯来进行拆分,比如说把当前字符串的第一个字符当做一个数,继续往下拆分,如果不可以的话,就将当前的前两个字符当做一个数,继续往下拆分,还不可以的话,就当前的前3个字符...就这样依次拆分下去,然后加了3个优化,一个是当前字符串如果以0开头的话,只能让这个0单独做一个数,不能和其他字符继续组数;第二个是判断当前数是否在int范围内;第三个是当前数如果已经大于前两个数之和,就没有必要继续判断和拆分了。代码如下:

    class Solution {
    public:
    
        vector<int> list;
        int length;
    
        vector<int> splitIntoFibonacci(string S) {
            length=S.length();
            backTrack(S,0,0,0);
            return list;
        }
    
        bool backTrack(string s,int index,int sum,int prev){
            if(index==length)return list.size()>=3;
            long long curr=0;
            for(int i=index;i<length;i++){
                if(i>index&&s[index]=='0')break;//优化1,以0开头不可行
                curr=curr*10+s[i]-'0';
                if (curr > INT_MAX) {
                    break;
                }
                if (list.size() >= 2) {
                    if (curr < sum) {
                        continue;
                    }
                    else if (curr > sum) {
                        break;
                    }
                }
                list.push_back(curr);
                if(backTrack(s,i+1,prev+curr,curr))return true;
                list.pop_back();
            }
            return false;
        }
    };
  • 相关阅读:
    hdu 4685(强连通分量+二分图的完美匹配)
    图的连通性问题
    poj 1904(强连通分量+完美匹配)
    poj 2186 "Popular Cows"(强连通分量入门题)
    poj 1236(强连通分量分解模板题)
    EOJ2018.10 月赛
    21.Merge Two Sorted Lists
    20.Valid Parentheses
    19.Remove Nth Node From End of List
    18.4Sum
  • 原文地址:https://www.cnblogs.com/qingjiuling/p/14103046.html
Copyright © 2020-2023  润新知