LeetCode 306 addtive number

来源:互联网 发布:数据预处理的数据集成 编辑:程序博客网 时间:2024/05/01 13:22

 addtive numer 

主要是判断一个数是不是可加的,譬如1123,13417等都是addtive numer

首先,本算法可以采用递归方法或者迭代方法,判断函数为isTrue函数。

首先选择数a,可以从第0位一直到一半的位数就足够   a      i位

在选择数b,b   j位

l为字符串总长度

选完数a,b后,留下的位数l-j要大于i和j-i之中的最大值,道理简单易懂

最后,将a,b,和剩余的字符串substr截取出来作为参数传递给isTrue函数


isTrue函数将a,b之和相加,判断substr是否是以a,b之和c的字符串为开头,如果是,将剩余的字符串和b,c传入isTrue函数进行递归,若最终substr为空字符串,

返回true。

如果不包含,则返回false

代码如下

class Solution {    public boolean isAdditiveNumber(String num) {int l = num.length();for(int i = 1;i<=(l-1)/2;i++){if(num.charAt(0)=='0'&& i>=2) break;for (int j = i+1; l-j>=Math.max(j-i, 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));String substr = num.substring(j);if(isTrue(substr,num1,num2))                return true;}}return false;            }private boolean isTrue(String substr, long num1, long num2) {if(substr.equals("")) return true;Long nums3 = num1+num2;if(!substr.startsWith(nums3.toString())){return false;}        return isTrue(substr.substring(nums3.toString().length()),num2,nums3);}}

原创粉丝点击