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
进阶:
你如何处理一个溢出的过大的整数输入?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/additive-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路及方法

每天一道小暴力。今天哭了,太难了我觉得。本办法,就是先确定前两个数,然后依次往后找。

class Solution {
    public boolean isAdditiveNumber(String num) {
        // i表示第一个数结尾
        for (int i = 1; i < num.length(); i++) {
            String numStr1 = num.substring(0, i);
            // 判断是否0开头
            if (numStr1.length() > 1 && numStr1.charAt(0) == '0') {
                continue;
            }
            // j表示第二个数结尾
            for (int j = i + 1; j <= num.length() ; j++) {
                String numStr2 = num.substring(i, j);
                // p判断是否0开头
                if (numStr2.length() > 1 && numStr2.charAt(0) == '0') {
                    break;
                }
                long num1 = Long.valueOf(numStr1);
                long num2 = Long.valueOf(numStr2);
                long numSum = num1 + num2;
                String tmp = num1 + "" + num2 + "" + numSum;
                // 当前三个数加起来长度不超过给定字符串长度,继续加
                while (tmp.length() < num.length()) {
                    num1 = num2;
                    num2 = numSum;
                    numSum = num1 + num2;
                    tmp = tmp + numSum;
                }
                // 如果等于num
                if (tmp.equals(num)) {
                    return true;
                }
            }
        }

        return false;
    }
}

结果如下:
智商感人!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容