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

93. 复原IP地址

时间:2020-12-01 12:10:43      阅读:10      评论:0      收藏:0      [点我收藏+]

标签:size   难度   ref   次数   tco   16px   code   emoji   字符   

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
 #define MAX_IP_ADR 1000
 #if 0
 int IsValid(char* s, int i, int j)
{
    int num = 0;
    int k;
    if (j - i > 3) {
        return -1;
    }
    // 不允许0开头
    for (k = i; k < j; k++) {
        num = num * 10 + (s[k] - 0);
    }
    if ((num != 0 && s[i] == 0) || (num == 0 && (j - i) > 1)) {
        return -1;
    }
    if (num >= 0 && num <= 255) {
        //printf("the num is %d\n", num);
        return num;
    }
    return -1;
}
#endif
#if 1
 int IsValid(char *s,int start,int end){
     int len=strlen(s);
     int tmp,num=0;
    // 不可能是四位数
     if(end-start>3){
         return -1;
     }
   
     for(int i=start;i<end;i++){
         
         num=num*10+s[i]-0;
     }
     //不能出现08.07类似情况,后面是000
     if(((num!=0)&&(s[start]-0==0))||((num == 0 && (end - start) > 1))){
         return -1;
     }
    
     if((num>255)||(num<0)){
         
         return -1;
     }
     return num;

 }
 #endif
char ** restoreIpAddresses(char * s, int* returnSize){
    int len=strlen(s);
    
    /* "xxx.xxx.xxx.xxx" */
    int ipaddress[1000][4]={0};
    int cnt=0;
    for(int i=1;i<=3;i++){
        for(int j=i+1;j<len;j++){
            for(int k=j+1;k<len;k++){
                //printf("i%d j%d k%d\n",i,j,k);
                if(((ipaddress[cnt][0]=IsValid(s,0,i))!=-1)&&((ipaddress[cnt][1]=IsValid(s,i,j))!=-1)&&(((ipaddress[cnt][2]=IsValid(s,j,k))!=-1)&&((ipaddress[cnt][3]=IsValid(s,k,len))!=-1))){
                    cnt++;
                }
                
            }

        }
    }
    //printf("%d/r/n",cnt);
    char **ipadr=(char **)malloc(sizeof(char *)*cnt);
    for(int i=0;i<cnt;i++){
        ipadr[i]=(char *)malloc(sizeof(char)*16);
        //printf("%d %d %d %d\n",ipaddress[i][0],ipaddress[i][1],ipaddress[i][2],ipaddress[i][3]);
       sprintf(ipadr[i],"%d.%d.%d.%d",ipaddress[i][0],ipaddress[i][1],ipaddress[i][2],ipaddress[i][3]); 
    }
    *returnSize=cnt;
    return ipadr;
}

//要考虑sprintf的使用

 

93. 复原IP地址

难度中等

给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。

有效的 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.‘ 分隔。

例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。

 

示例 1:

输入:s = "25525511135"
输出:["255.255.11.135","255.255.111.35"]

示例 2:

输入:s = "0000"
输出:["0.0.0.0"]

示例 3:

输入:s = "1111"
输出:["1.1.1.1"]

示例 4:

输入:s = "010010"
输出:["0.10.0.10","0.100.1.0"]

示例 5:

输入:s = "101023"
输出:["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]

 

提示:

  • 0 <= s.length <= 3000
  • s 仅由数字组成
通过次数89,272
 
提交次数175,877
 
 
 

93. 复原IP地址

标签:size   难度   ref   次数   tco   16px   code   emoji   字符   

原文地址:https://www.cnblogs.com/cheshl/p/14042965.html

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