zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    ES6入门详解(二) 解构赋值
    python 入门简述
    webpack4x 简述
    ES6入门详解(一) let const
    关于HTML的简述
    按照in条件排序
    Oracle 优化效率
    input输入框校验
    <a>标签操作
    svn安装
  • 原文地址:https://www.cnblogs.com/qingjiuling/p/14103046.html
Copyright © 2011-2022 走看看