https://leetcode.com/problems/split-array-into-fibonacci-sequence/description/
题目大意:给你一个串S,问能否将其变成满足fibonacci数列规则的一个数列,即f[i]+f[i+1] =f[i+2],其中所有的数都在整形范围内。
解题思路:暴力分解,加上一点处理的小技巧。先暴力找前两位a和b,然后剩下的字符里判断 a+b的值 c
1.c是否在整形范围
2.c是否满足是剩下字符的开头
之后 a=b, b=c继续递归
class Solution { private List<Integer> find(int a,int b,String s) { List<Integer> res =new ArrayList<>(); res.add(a); res.add(b); long c = a+b; if( c>Integer.MAX_VALUE ) return new ArrayList<>(); int cnt = Integer.toString((int)c).length(); while(s.length()>0) { c = a+b; if( c<0 ) return new ArrayList<>(); cnt = Integer.toString((int)c).length(); if( s.startsWith(Integer.toString((int)c))) { res.add((int)c); s=s.substring(cnt); } else { return new ArrayList<>(); } a=b; b=(int)c; } return res; } public List<Integer> splitIntoFibonacci(String S) { int n = S.length(); for(int i=1;i<n;i++) { String sa = S.substring(0,i); Long a = Long.valueOf(sa); if(a>Integer.MAX_VALUE) break; for(int j=1;j+i+1<n;j++) { String sb = S.substring(i,i+j); Long b = Long.valueOf(sb); if(b>Integer.MAX_VALUE) break; if( (a==0 && sa.length()>1) || (b==0 && sb.length()>1) ) continue; List<Integer> res = find(a.intValue(),b.intValue(),S.substring(i+j)); if(res!=null && res.size()>=3) return res; } } return new ArrayList<>(); } }