Skip to content

Commit d337300

Browse files
committed
Runtime: 1 ms (Top 97.83%) | Memory: 41.60 MB (Top 63.04%)
1 parent 69bcea2 commit d337300

File tree

1 file changed

+22
-46
lines changed

1 file changed

+22
-46
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,29 @@
1+
// Runtime: 1 ms (Top 97.83%) | Memory: 41.60 MB (Top 63.04%)
2+
13
class Solution {
2-
private List<Integer> res;
4+
List<Integer> list=new ArrayList<>();
35
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+
610
}
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);
4922
}
23+
24+
if(i==index && num.charAt(i)=='0') return false;
5025
}
26+
return false;
5127
}
5228

53-
}
29+
}

0 commit comments

Comments
 (0)