306. Additive Number/842. Split Array into Fibonacci Sequence -- back tracking

匿名 (未验证) 提交于 2019-12-02 22:56:40
 
class Solution {     public boolean isAdditiveNumber(String num) {         int len = num.length();         if(len<3) return false;         return dfs(new ArrayList<>(), num, 0);             }          private boolean dfs(List<Long> curResult,  String s, int start){         if(curResult.size() >=3 && start==s.length()){             return true;         }                   boolean flag = false;         for(int i=1; i<=s.length()-2; i++){                  if(start+i >s.length()) break;             int size = curResult.size();             String substr = s.substring(start,start+i);             if(substr.length()>1 && substr.charAt(0) == '0') continue;              long subnum = Long.valueOf(substr);             if(size>=2) if(curResult.get(size-1) + curResult.get(size-2) != subnum) continue;             curResult.add(subnum);             start += i;             flag = flag || dfs(curResult,s,start);             if(flag) return true;             curResult.remove(curResult.size()-1);             start -=i;         }          return flag;     }          }

class Solution {     public List<Integer> splitIntoFibonacci(String S) {         List<Integer> result = new ArrayList<>();         if(S.length()<3 ) return result;          dfs(result, S,0);         return result;     }               private boolean dfs(List<Integer> curResult,  String s, int start){         if(curResult.size() >=3 && start==s.length()){             return true;         }                   boolean flag = false;         for(int i=1; i<=(s.length()-2 <10? s.length()-2:10); i++){                  if(start+i >s.length()) break;             int size = curResult.size();             String substr = s.substring(start,start+i);             if(substr.length()>1 && substr.charAt(0) == '0') continue;              long subnum = Long.valueOf(substr);             if(subnum > Integer.MAX_VALUE) continue;             if(size>=2) if(curResult.get(size-1) + curResult.get(size-2) != subnum) continue;             curResult.add((int)subnum);             start += i;             flag = flag || dfs(curResult,s,start);             if(flag) return true;             curResult.remove(curResult.size()-1);             start -=i;         }          return flag;     } }

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!