Leetcode 842 将数组拆分成斐波那契序列
回溯解法 JAVA:
public final List<Integer> splitIntoFibonacci(String S) { List<Integer> reList = new LinkedList<Integer>(); search(S, 0, reList, 0); return reList; } private final boolean search(String s, int flag, List<Integer> reList, int reLen) { if (flag == s.length() && reLen > 2) { return true; } int nextLen = reLen + 1; for (int i = flag + 1; i <= s.length(); i++) { String inStr = s.substring(flag, i); if (i > flag + 1 && '0' == inStr.charAt(0)) { continue; } if (i > flag + 10) { break; } long numLon = Long.valueOf(inStr); if (numLon > Integer.MAX_VALUE) { continue; } if (reLen >= 2) { if (reList.get(reLen - 2) + reList.get(reLen - 1) != numLon) { continue; } } reList.add((int) numLon); if (search(s, i, reList, nextLen)) { return true; } reList.remove(reList.size() - 1); } return false; }
回溯解法 JS:
var splitIntoFibonacci = function(S) { let reArr = []; search(S,reArr,0); return reArr; }; var search=function(s,reArr,flag){ if(flag==s.length){ if(reArr.length>2){ return true; } return false; } for(let i=flag+1;i<=s.length;i++){ let current = s.slice(flag,i); let arrLen = reArr.length; if(i-flag>1&¤t.charAt(0)=='0'){ continue; } if(arrLen>=2){ if(Number(current)>2**31-1){continue;} let sum = Number(reArr[arrLen-1])+Number(reArr[arrLen-2]); if(sum!=Number(current)){ continue; } } reArr.push(current); if(search(s,reArr,i)){ return true; } reArr.pop(); } return false; }
当你看清人们的真相,于是你知道了,你可以忍受孤独
分类:
数据结构与算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构