码迷,mamicode.com
首页 > 其他好文 > 详细

【leetcode】306. 累加数

时间:2021-01-05 11:20:52      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:lse   bit   number   div   pst   bool   bre   color   while   

 

bool isAdditiveNumber(char * num){
    int i, j, k, len=strlen(num), pst1=0, pst2=0, bit=0, third;
    char* tmp1=(char*)calloc(22,sizeof(char));
    char* tmp2=(char*)calloc(22,sizeof(char));
    char* tmp3=(char*)calloc(22,sizeof(char));
    for (i=1; i<=len/2; i++){
        if(i>1 && num[0]==0)
                break;        
        for (j=i+1; j<len && j-i<=len/2; j++){
            memset(tmp1,0x30,21);
            memcpy(tmp1+21-i,num,i*sizeof(char));
            if(j-i>1 && num[i]==0)
                break;
            memset(tmp2,0x30,21);
            memcpy(tmp2+21-(j-i),num+i,(j-i)*sizeof(char));
            third=j;
            pst2=( 21-(j-i) < 21-i )?21-(j-i) :21-i;
            while(third<len){
                memset(tmp3,0x30,21);
                for (k=20; k>=pst2-1; k--){                
                    tmp3[k] += (tmp1[k]-0+tmp2[k]-0+bit)%10;
                    bit=(tmp1[k]-0+tmp2[k]-0 +bit >= 10)?1 :0;
                }
                while(k<20 && tmp3[k]==0)
                    k++;
                if(strncmp(tmp3+k,num+third,20-k+1) == 0){                
                    char* p=tmp1;
                    tmp1=tmp2;
                    tmp2=tmp3;
                    tmp3=p;                    
                    third+=20-k+1;
                    pst2=k;
                }
                else
                    break;
            }
            if(third==len)
                return true;            
        }
    }
    return false;
}

 

【leetcode】306. 累加数

标签:lse   bit   number   div   pst   bool   bre   color   while   

原文地址:https://www.cnblogs.com/ganxiang/p/14221101.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!