LeetCode—306 Additive Number

GitHub地址:https://github.com/corpsepiges/leetcode

Java版本和Python版本,求star。

public class Solution {
    public boolean isAdditiveNumber(String num) {
        int length=num.length();
        int l=Math.min(length, length*2/3+3);
        for (int i = 0; i < l-2; i++) {
			String first=num.substring(0,i+1);
			for (int j = i+1; j < l-1; j++) {
				int f=i+1;
				int s=j-i;
				int t=length-j-1;
				if (t>=s&&t>=f) {
					String second=num.substring(i+1,j+1);
					String third=num.substring(j+1,length);
					if (f(first, second, third)) {
						return true;
					}
				}
			}
		}
        return false;
    }
    public boolean f(String first,String second,String third){
    	if (third.equals("")) {
			return true;
		}
    	int f=first.length();
    	int s=second.length();
    	int t=third.length();
    	if (t<s||t<f) {
			return false;
		}
    	String sum=addString(first, second);
    	if (sum.length()>t) {
			return false;
		}
    	String test=third.substring(0,sum.length());
    	if (sum.equals(test)) {
			return f(second, sum, third.substring(sum.length(),t));
		}
    	return false;
    }
    public String addString(String sa,String sb){
    	int al=sa.length();
    	int bl=sb.length();
    	if (al<bl) {
			return  addString(sb, sa);
		}
    	char[] a=sa.toCharArray();
    	char[] b=sb.toCharArray();
    	int[] sum=new int[al];
    	boolean flag=false;
    	for (int i = 0; i < bl; i++) {
			sum[al-i-1]=Integer.parseInt(""+b[bl-i-1])+Integer.parseInt(""+a[al-i-1])+(flag?1:0);
			if (sum[al-i-1]>=10) {
				sum[al-i-1]-=10;
				flag=true;
			}else{
				flag=false;
			}
		}
    	for (int i = 0; i < al-bl; i++) {
			sum[i]=Integer.parseInt(""+a[i]);
		}
    	StringBuffer sbf=new StringBuffer();
    	if (!flag||al==bl) {
    		for (int i = 0; i < sum.length; i++) {
    			sbf.append(String.valueOf(sum[i]));
    		}
    		if (flag) {
				return "1"+sbf.toString();
			}else {
				return sbf.toString();
			}
		}else {
			sum[al-bl-1]++;
			for (int i = 0; i < sum.length; i++) {
    			sbf.append(String.valueOf(sum[i]));
    		}
			return sbf.toString();
		}
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值