842. 将数组拆分成斐波那契序列

 1 //确定前三个数
 2 class Solution 
 3 {
 4 public:
 5     vector<int> splitIntoFibonacci(string num) 
 6     {
 7         vector<int> res;
 8         int n = num.size();
 9         for(int i = 0;i < n - 2;i++)
10         {
11             if(i != 0 && num[0] == '0') continue;//"0123"
12             for(int j = i + 1;j < n - 1;j ++)
13             {
14                 if(j != i+1 && num[i+1] =='0') continue;//"1023"->"1"和"02"直接退出
15                 if(i > 9) break; //stol最多只读10位
16                 long num1 = stol(num.substr(0,i+1));//stol最多只读10位,即 i+1 <= 10 ——> i <= 9
17                 long num2 = stol(num.substr(i+1, j-i));//stol最多只读10位,即 j-i <= 10 ——> j <= 10+i;
18                 long num3 = (num1+num2);
19                 if(num1 > INT_MAX || num2 > INT_MAX || num3 > INT_MAX) break; //0 <= F[i] <= 2^31 - 1
20                 if( to_string(num3) == num.substr(j+1, to_string(num3).size()))
21                 {
22                     vector<int> temp;
23                     temp.push_back(num1);
24                     temp.push_back(num2);
25                     temp.push_back(num3);
26                     string all =  num.substr(0, j+1+to_string(num3).size());
27                     while(all.size() < num.size())
28                     {
29                         num1 = num2;
30                         num2 = num3;
31                         num3 = num1+num2;
32                         if(num1 > INT_MAX || num2 > INT_MAX || num3 > INT_MAX) break; //0 <= F[i] <= 2^31 - 1
33                         all+= to_string(num3);
34                         temp.push_back(num3);
35                     }
36                     if(all == num) return temp;
37                 }
38             }
39         }
40         return {};
41     }
42 };

 

posted @ 2020-04-17 09:37  Jinxiaobo0509  阅读(154)  评论(0)    收藏  举报