LeetCode 842配列をフィボナッチ数列HERODINGのLeetCodeの道に分割する


S="123456579"などの数値文字列Sが与えられ、それをフィボナッチ式のシーケンス[123,456,579]に分けることができる.
形式上、フィボナッチ式シーケンスは非負の整数リストFであり、以下を満たす.
0 <= F[i] <= 2^31 - 1,(    ,        32         );
F.length >= 3;
     0 <= i < F.length - 2,   F[i] + F[i+1] = F[i+2]   。

また、文字列を小さなブロックに分割する場合、このブロックが数値0自体でない限り、各ブロックの数字はゼロで始まる必要はありません.
Sから分割されたフィボナッチ式のシーケンスブロックのセットを返し、分割できない場合は[]を返します.
例1:
入力:「123456579」出力:[1234556579]
例2:
入力:11235813出力:[1,1,2,3,5,8,13]
例3:
入力:112358130出力:[]説明:このタスクは完了できません.
例4:
入力:0123出力:[]説明:各ブロックの数字はゼロで始まることができないため、「01」、「2」、「3」は有効な答えではありません.
例5:
入力:「1101111」出力:[110,1,111]解釈:出力[11,0,11,11]も同様に受け入れられる.
ヒント:
1 <= S.length <= 200
    S       。

解題の構想:また熟知した遡及+枝切りの方法で、ここで直接公式の問題解を引用して解釈して、まず遍歴が終わったら、直接戻って、さもなくばindexから遍歴して、探している過程の中で、0に出会ったら直接breakして、それから絶えず前進して、進位した後にまず範囲を超えているかどうかを見て、フィボナッチの条件を満たすかどうかを見ていません.コードは以下の通りです.
class Solution {
     
public:
    vector<int> splitIntoFibonacci(string S) {
     
        //        
        vector<int> list;
        backtrack(list, S, S.length(), 0, 0, 0);
        return list;
    }

    //   +  
    bool backtrack(vector<int>& list, string S, int length, int index, long long sum, int prev) {
     
        //     ,  
        if (index == length) {
     
            return list.size() >= 3;
        }
        long long curr = 0;
        for (int i = index; i < length; i++) {
     
            //   0   
            if (i > index && S[index] == '0') {
     
                break;
            }
            //             
            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(list, S, length, i + 1, prev + curr, curr)) {
     
                return true;
            }
            //   
            list.pop_back();
        }
        return false;
    }
};



/*  :heroding
  :https://leetcode-cn.com/problems/split-array-into-fibonacci-sequence/solution/xiang-jie-guan-fang-ti-jie-by-heroding-hycb/
  :  (LeetCode)
        。             ,          。*/