File tree 1 file changed +52
-0
lines changed
1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change
1
+ // Time: O(n^3)
2
+ // Space: O(n)
3
+
4
+ class Solution {
5
+ public:
6
+ vector<int > splitIntoFibonacci (string S) {
7
+ for (int i = 0 , a = 0 ; i + 2 < S.length (); ++i) {
8
+ a = 10 * a + S[i] - ' 0' ;
9
+ for (int j = i + 1 , b = 0 ; j + 1 < S.length (); ++j) {
10
+ b = 10 * b + S[j] - ' 0' ;
11
+ vector<int > fib = {a, b};
12
+ int k = j + 1 ;
13
+ while (k < S.length ()) {
14
+ if (fib[fib.size () - 2 ] > numeric_limits<int >::max () - fib[fib.size () - 1 ]) {
15
+ break ;
16
+ }
17
+ auto c = fib[fib.size () - 2 ] + fib[fib.size () - 1 ];
18
+ auto l = startswith (S, k, c);
19
+ if (l == 0 ) {
20
+ break ;
21
+ }
22
+ fib.emplace_back (c);
23
+ k += l;
24
+ }
25
+ if (k == S.length ()) {
26
+ return fib;
27
+ }
28
+ if (b == 0 ) {
29
+ break ;
30
+ }
31
+ }
32
+ if (a == 0 ) {
33
+ break ;
34
+ }
35
+ }
36
+ return {};
37
+ }
38
+
39
+ private:
40
+ int startswith (const string& S, int k, int x) {
41
+ int y = 0 ;
42
+ for (int i = k; i < S.length (); ++i) {
43
+ y = 10 * y + S[i] - ' 0' ;
44
+ if (y == x) {
45
+ return i - k + 1 ;
46
+ } else if (y > x) {
47
+ break ;
48
+ }
49
+ }
50
+ return 0 ;
51
+ }
52
+ };
You can’t perform that action at this time.
0 commit comments