1
+ // Runtime: 1 ms (Top 97.83%) | Memory: 41.60 MB (Top 63.04%)
2
+
1
3
class Solution {
2
- private List <Integer > res ;
4
+ List <Integer > list = new ArrayList <>() ;
3
5
public List <Integer > splitIntoFibonacci (String num ) {
4
- dfs (0 , num , -1 , -1 , new ArrayList <>());
5
- return res ==null ?new ArrayList <>():res ;
6
+
7
+ if (backtrack (num ,0 )) return list ;
8
+ else return new ArrayList ();
9
+
6
10
}
7
- private void dfs (int ptr , String s , int prev1 , int prev2 , List <Integer > list ){
8
- if (ptr ==s .length ()) {
9
- if (list .size ()>2 ){
10
- res = new ArrayList <>(list );
11
- }
12
- return ;
13
- }
14
- else if (prev1 ==-1 || prev2 ==-1 ){
15
- if (s .charAt (ptr )=='0' ){
16
- list .add (0 );
17
- dfs (ptr +1 , s , 0 , prev1 , list );
18
- if (res !=null ) return ;
19
- list .remove (0 );
20
- }else {
21
- for (int i = ptr +1 ; i <=s .length ();i ++){
22
- long n = Long .parseLong (s .substring (ptr , i ));
23
- if (n >=(long )Math .pow (2 , 31 )) break ;
24
- list .add ((int )n );
25
- dfs (i , s , (int )n , prev1 , list );
26
- if (res !=null ) return ;
27
- list .remove (list .size ()-1 );
28
- }
29
- }
30
- }else {
31
- if (s .charAt (ptr )=='0' ){
32
- if (prev1 +prev2 ==0 ){
33
- list .add (0 );
34
- dfs (ptr +1 , s , 0 , prev1 , list );
35
- if (res !=null ) return ;
36
- list .remove (0 );
37
- }
38
- return ;
39
- }
40
- for (int i =ptr +1 ;i <=s .length ();i ++){
41
- long n = Long .parseLong (s .substring (ptr , i ));
42
- if (n >=(long )Math .pow (2 , 31 )) break ;
43
- if (n == prev1 +prev2 ){
44
- list .add ((int )n );
45
- dfs (i , s , (int )n , prev1 , list );
46
- if (res !=null ) return ;
47
- list .remove (list .size ()-1 );
48
- }
11
+ boolean backtrack (String num ,int index ){
12
+ if (index ==num .length ()) return list .size ()>2 ;
13
+
14
+ int n =0 ;
15
+ for (int i =index ;i <num .length ();i ++){
16
+ n =n *10 +(num .charAt (i )-'0' );
17
+ if (n <0 ) return false ;
18
+ if (list .size ()<2 || list .get (list .size ()-1 )+list .get (list .size ()-2 )==n ){
19
+ list .add (n );
20
+ if (backtrack (num ,i +1 )) return true ;
21
+ list .remove (list .size ()-1 );
49
22
}
23
+
24
+ if (i ==index && num .charAt (i )=='0' ) return false ;
50
25
}
26
+ return false ;
51
27
}
52
28
53
- }
29
+ }
0 commit comments