306. Additive Number

Additive number is a string whose digits can form additive sequence.

A valid additive sequence should contain at least three numbers. Except for the first two numbers, each subsequent number in the sequence must be the sum of the preceding two.

For example:
"112358" is an additive number because the digits can form an additive sequence: 1, 1, 2, 3, 5, 8.

1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8

"199100199" is also an additive number, the additive sequence is: 1, 99, 100, 199.

1 + 99 = 100, 99 + 100 = 199

Note: Numbers in the additive sequence cannot have leading zeros, so sequence 1, 2, 03 or 1, 02, 3 is invalid.

Given a string containing only digits '0'-'9', write a function to determine if it's an additive number.

Follow up:
How would you handle overflow for very large input integers?

一刷
遍歷的方法是,對于第1個數,第2個數的長度i, j遍歷,
I<=len/2, Math.max(I, j)<=n-i-j, 因為和的長度不會小于其中任意一個

class Solution {
    public boolean isAdditiveNumber(String num) {
        int n = num.length();
        for(int i=1; i<=n/2; i++){
            for(int j=1; Math.max(j, i)<=n-i-j; j++){
                if(isValid(i, j, num)) return true;
            }
        }
        return false;
    }
    
    private boolean isValid(int i, int j, String num){
        if(num.charAt(0) == '0' && i>1) return false;
        if(num.charAt(i) == '0' && j>1) return false;
        String sum;
        Long x1 = new Long(num.substring(0,i));
        Long x2 = new Long(num.substring(i,i+j));
        for(int start = i+j; start != num.length(); start+= sum.length()){
            x2 = x2 + x1;
            x1 = x2 - x1;
            sum = x2.toString();
            if(!num.startsWith(sum, start)) return false;
        }
        return true;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容