给定一个只包含数字 ‘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
进阶:
- 你如何处理一个溢出的过大的整数输入?
一、思路
首先,想想难点是什么,有哪些部分很难处理:
- 如何划分数字?
- 大数相加问题
- 怎么样才能遍历所有的可能组合?
- 最后,该题属于哪一类型的题目?
接下来一个一个的回答上述四个问题。
1、如何划分数字?
每次验证前两个数之和时,需要先确定这两个数,可是我们事先并不知道数字有多长,也不确定第二个数字的起始位置,于是要做的是:
- 确定第一个数字的长度len1
- 如此一来,第二个数字起始位置就确定下来了
- 接着确定其长度为len2
- 于是需要验证的数字的起始位置也确定了,其长度与前两数之和的长度一致