306. Additive Number

来源:互联网 发布:keynote for mac 6.1 编辑:程序博客网 时间:2024/06/05 03:17

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?

class Solution {     public boolean isAdditiveNumber(String num) {        int L = num.length();        //确定第一个数,最终用num.subStr(0,i)来确定第一个数,所以i可以用来标示第一个数的长度,        //但是下标i不包含在第一个数中        for(int i=1;i<=(L-1)/2;i++){            //如果长度大于等于2,则不能以0开头            if(num.startsWith("0") && i>=2) break;            //确定第二个数,第一个数用num.subStr(i,j),包括i,不包括j,所以长度为j-i,            //第三个数从下标j开始,长度最长为L-1-j+1,即L-j            for(int j=i+1;(L-j)>=i && (L-j)>=j-i;j++){                if(num.charAt(i)=='0' && j-i>=2) break;                long num1 = Long.parseLong(num.substring(0,i));                long num2 = Long.parseLong(num.substring(i,j));                if(isAdditive(num.substring(j), num1, num2)){                    return true;                }            }        }        return false;    }    //判断由num1,num2和后续的字串能否构成加法序列    public boolean isAdditive(String remain,long num1,long num2){        if(remain.equals("")) return true;        long sum = num1+num2;        String sumStr = ""+sum;        if(!remain.startsWith(sumStr)) return false;        return isAdditive(remain.substring(sumStr.length()), num2, sum);    }}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胸下垂应该怎么办19岁 身上的肉特别松怎么办 才30岁脸部松弛怎么办 脸上的皮肤很松怎么办 面部皮肤干燥起皮刺痛怎么办 脸上的皮肤很粗糙怎么办 脸上又红又痒怎么办 鲜红斑痣增生了怎么办 激光祛斑后色素沉着怎么办 白球鞋洗后发黄怎么办 夏天出汗妆花了怎么办 买的小产权房怎么办 嘴唇起皮怎么办小妙招 照相嘴巴是歪的怎么办 鼻子笑起来很宽怎么办 财运不好怎么办最近你有偏财 从小缺爱的人怎么办 一到晚上就怕死怎么办 碰到不讲理的人怎么办 遇到不讲理的人怎么办 蚰蜓虫子咬了怎么办 腰肌损伤怎么办恢复快 腰闪了怎么办最有效 墨兰严重烂根怎么办 铁兰花变绿了怎么办 1岁半宝宝吵瞌睡怎么办 28天宝宝吵瞌睡怎么办 2个月宝宝闹瞌睡怎么办 被刺猬的刺扎了怎么办 买电脑被坑了怎么办 买电脑被坑了怎么办啊 在电脑城被坑了怎么办 小狗20天不睁眼怎么办 金星秀停播沈南怎么办 干了活拿不到钱怎么办 干完活要不到钱怎么办 让蚊子咬了很痒怎么办 秋天被蚊子咬了怎么办 练芭蕾脚背太硬怎么办 杨梅酒里的杨梅怎么办 月经期喝了啤酒怎么办