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<>();
}
}