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 };
Mamba never out

浙公网安备 33010602011771号