【leetcode】93. 复原IP地址

void recursion(char * s,int slen,char** arr,int* returnSize,char* temp,int tlen,int cnt,int start,int len){
    if(cnt==4){
        if(tlen==len+4){
            arr[(*returnSize)]=(char*)calloc(tlen,sizeof(char));
            memcpy(arr[(*returnSize)],temp,tlen-1);
            (*returnSize)++;
        }
        return;
    }
    for(int i=start; i<=3 && slen+i<=len; i++){
        if(i>=2 && s[0]=='0')
            break;
        if(i==3 && (s[i-3]-'0')*100+(s[i-2]-'0')*10+(s[i-1]-'0') >255)
            break;
        memcpy(temp+tlen,s,i);
        strcat(temp,".");
        recursion(s+i,slen+i,arr,returnSize,temp,tlen+i+1,cnt+1,start,len);
        memset(temp+tlen,0,i+1);
    }
}
char ** restoreIpAddresses(char * s, int* returnSize){
    int len=strlen(s);
    char** arr=(char**)calloc(1000,sizeof(char*));
    char temp[1000]={0};
    *returnSize=0;
    if(len>12 || len<4) return NULL; 
    int start=(len<11)?1 :(len<12)?2 :3;
    recursion(s,0,arr,returnSize,temp,0,0,start,len);
    return arr;
}
原文地址:https://www.cnblogs.com/ganxiang/p/14132544.html