leetcode 306. Additive Number

public class Solution {
   public boolean isAdditiveNumber(String num) {
       if(num==null ||num.length()<3)
          return false;
       int len=num.length();
       for(int i=0;i<len-2;i++)
       {
           if(num.charAt(0)=='0'&&i>=1)   //若第一位是0,则第一个数只能截取0,不能 01,00,这种。
               break;
           for(int j=i+1;j<len-1;j++)
  {
          if(num.charAt(i+1)=='0' && j-i>=2)   // 例如“101123” 当i=0时,若i+1位置为0,第二个字符串就只能截取0,若j-i>=2,就违规了
                     break;                            //      i j 
String s1=num.substring(0,i+1);  //截取的是[0,i]位置的字符串。
String s2=num.substring(i+1,j+1);   //截取的[i+1,j]位置的字符串。
String s3=num.substring(j+1);     //剩余的字符串
                if(isValid(s1,s2,s3))
                   return true;
          }
      }
      return false;
   }
public boolean isValid(String s1,String s2,String str)
{
   if(str.equals(""))
   return true;
   long tmp=Long.valueOf(s1)+Long.valueOf(s2);
   String tmp1=String.valueOf(tmp);
   int len =tmp1.length();
   if(str.startsWith(tmp1)&&isValid(s2,tmp1,str.substring(len)))
      return true;
   return false;
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值