LeetCode 306 addtive number

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值