LeetCode_306累加数

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

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

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

说明: 累加序列里的数不会以 0 开头,所以不会出现 1, 2, 03 或者 1, 02, 3 的情况。
在这里插入图片描述
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/additive-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {
    public boolean isAdditiveNumber(String num) {
        if(num==null || num.length()<3) return false;
        for(int i=1;i<=num.length();i++){
            String num1 = num.substring(0,i);
            if(num1.charAt(0)=='0' && num1.length()>1){
                continue;//去除前导0
            }
            for(int j=i+1;j<num.length();j++){
                String num2 = num.substring(i,j);
                if(num2.charAt(0)=='0' && num2.length()>1){
                    continue;//去除前导0
                }
                long val1 = Long.valueOf(num1);
                long val2 = Long.valueOf(num2);
                boolean flag = dfs(num,j,val2,val1+val2);
                if(flag) return true;
            }
        }
        return false;
    }

    /*
    * index代表在num中的下标值
    * pre代表上一个操作数
    * value代表前两个操作数相加的目标值
    */
    public boolean dfs(String num, int index, long pre, long value){
        if(index==num.length()) return true;
        for(int i=index;i<num.length();i++){
            String temp = num.substring(index,i+1);//截取两数相加后的值
            if(temp.charAt(0)=='0' && temp.length()>1) continue;//去除前导0
            long val = Long.valueOf(temp);
            if(val<value){
                continue;
            } else if(val==value){
                return dfs(num,i+1,val,pre+val);
            }else{
                return false;
            } 
        }
        return false;
    }
}
发布了250 篇原创文章 · 获赞 0 · 访问量 1275

猜你喜欢

转载自blog.csdn.net/qq_36198826/article/details/103793642