leetcode 306 累加数

该代码实现了一个使用深度优先搜索(DFS)的方法来检查一个字符串是否表示一个加法序列。函数首先检查字符串长度,然后通过递归遍历所有可能的数字组合,判断当前数字序列是否满足加法规则。如果找到满足条件的序列,函数返回true,否则返回false。
摘要由CSDN通过智能技术生成

用dfs

class Solution {
     public boolean isAdditiveNumber(String num) {
        if (num.length() < 3)
            return false;
        return dfs(num,0,0,0,0);
    }

    /**
     *
     * @param num 字符串
     * @param index  起点
     * @param count  目前已经判断的数字个数
     * @param first  第一个数
     * @param second 第二个数
     * @return
     */
    private boolean dfs(String num, int index, int count, long first, long second) {
        if (index == num.length())
            return count > 2;
        //如果没有达到最后
        long cur = 0;
        for(int i = index; i < num.length(); i++){
            if (num.charAt(index) == '0' && i > index)
                return false;
            //获取当前数字,有可能出现当前数字是多位的情况,所以用sum存储
            cur = cur * 10 + num.charAt(i) - '0';
            //如果已经有两个数字,才会根据第三个数字进行计算
            if (count >= 2){
                long sum = first + second;
                //如果前两个数字相加已经小于了第三个数字,那么直接返回false
                if (sum < cur)
                    return false;
                //如果和大于第三个数字,说明当前的第三个数字可能要作为前面两个数字的一位,所以跳过往下的dfs,将第三位加入到当前数
                if (sum > cur)
                    continue;
            }
            //运行到这里说明要往下进行dfs
            if (dfs(num,i + 1,count + 1,second,cur))
                return true;
        }
        return false;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值