题目 <https://leetcode-cn.com/problems/restore-ip-addresses/>
回溯法
int isValid(char *s,int s_len){
if(s_len == 0){
return 0;
}
if(s_len == 1 && s[0] == '0'){
return 1;
}
if(s[0] == '0'){
return 0;
}
int i,n=0;
for(i=0;i<s_len;i++){
n*=10;
n += (s[i]-'0');
}
if(n>255){
return 0;
}
return 1;
}
char **returnString;
int returnColSizes;
int returnLen;
void search(char *s,int s_len,char*tmp,int tmp_len,int index,int point){
if(index == s_len && point == 4){
returnString[returnLen] = malloc(sizeof(char) * (returnColSizes+1));
memcpy(returnString[returnLen],tmp,returnColSizes);
returnString[returnLen][returnColSizes] = '\0';
returnLen++;
return;
}
int i,len;
for(i=index;i<s_len;i++){
len = i-index+1;
if(isValid(&s[index],len) == 1){
memcpy(&tmp[tmp_len],&s[index],len);
tmp[tmp_len + len] = '.';
search(s,s_len,tmp,tmp_len + len + 1,i+1,point+1);
}else{
break;
}
}
}
char ** restoreIpAddresses(char * s, int* returnSize){
int s_len = strlen(s);
if(s_len > 12){
*returnSize = 0;
return NULL;
}
returnString = malloc(sizeof(char*) * 10000);
returnColSizes = s_len+3;
returnLen = 0;
char *tmp = malloc(sizeof(char) * (s_len*2+1));
search(s,s_len,tmp,0,0,0);
free(tmp);
*returnSize = returnLen;
return returnString;
}