博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode:累加数【306】
阅读量:5144 次
发布时间:2019-06-13

本文共 2455 字,大约阅读时间需要 8 分钟。

LeetCode:累加数【306】

题目描述

累加数是一个字符串,组成它的数字可以形成累加序列。

一个有效的累加序列必须至少包含 3 个数。除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和。

给定一个只包含数字 '0'-'9' 的字符串,编写一个算法来判断给定输入是否是累加数。

说明: 累加序列里的数不会以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。

示例 1:

输入: "112358"输出: true 解释: 累加序列为: 1, 1, 2, 3, 5, 8 。1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8

示例 2:

输入: "199100199"输出: true 解释: 累加序列为: 1, 99, 100, 199。1 + 99 = 100, 99 + 100 = 199

进阶:

你如何处理一个溢出的过大的整数输入?

题目分析

   累加数是一个由一组数字拼合成的字符串,除了最开始的两个数以外,字符串中的其他数都等于它之前两个数相加的和

   采用的方式还是递归回溯框架。这道题涉及的一个重要问题是怎么把数字从字符串中划分出来,再没有更好的方法前,我们只能把所有的可能性提取出来。

public void DFS(List
> ans,String str,List
list,int start) { //递归结束条件 if(list.size()==3) { ans.add(new ArrayList<>(list)); return; }     //业务逻辑处理 for(int i=start;i

  但是这里我们改变一下,因为我们并不需要保存所有的结果,我们要验证是否存在从第三个数字开始的数字是前否是两个数字的和,所以前两个数字我们是要需要考虑所有的情况的,但是接下来的数字我们要看是否是前两个数字的和,即前两个数字的所有可能性的和中是否存在于接下来的字符串里面。所以当我们list的尺寸是大于2开始要进行分支判断。

public boolean DFS(String str,List
list,int start) { //递归结束条件 if(start==str.length()) { //如果小于三的话,说明无法找到第三个数是前两个数的和,这样的返回是false。 return list.size()>2; } //找到第一个数的情况下,找第二个数 if(list.size()<2) { for(int i=start;i

  这样只有在所有路径都跑完了以后无论可走的情况下,最后才会返回false,只要有一个条路径走通就会返回true。但是最后通过了自定义样例,还是无法AC,原因在于我们没有考虑处理大数的问题,所以这里的Integer要换成BigInteger

Java题解

public boolean isAdditiveNumber(String num) {        return helper(num, new ArrayList
()); } public boolean helper(String remain, List
cur){ if(remain.length()==0) return cur.size()>=3; if(cur.size()<2) { for(int i=0;i
1&&part.startsWith("0")) continue; cur.add(new BigInteger(part)); if(helper(remain.substring(i+1),cur)) return true; cur.remove(cur.size()-1); } }else { BigInteger nextVal = cur.get(cur.size()-1).add(cur.get(cur.size()-2)); String next = String.valueOf(nextVal); if(remain.startsWith(next)) { cur.add(nextVal); if(helper(remain.substring(next.length()),cur)) return true; cur.remove(cur.size()-1); } } return false; }

转载于:https://www.cnblogs.com/MrSaver/p/9974299.html

你可能感兴趣的文章
第二次团队冲刺--2
查看>>
pair的例子
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
Oracle中包的创建
查看>>
关于PHP会话:session和cookie
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
jQuery on(),live(),trigger()
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
导航,头部,CSS基础
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
gzip
查看>>
转负二进制(个人模版)
查看>>
LintCode-Backpack
查看>>
查询数据库锁
查看>>
我对于脚本程序的理解——百度轻应用有感
查看>>
面试时被问到的问题
查看>>
当前记录已被另一个用户锁定
查看>>