leetcode 306 累加数

用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;
    }
}

你可能感兴趣的:(leetcode,算法,leetcode)