标签: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的使用
给定一个只包含数字的字符串,复原它并返回所有可能的 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
仅由数字组成标签:size 难度 ref 次数 tco 16px code emoji 字符
原文地址:https://www.cnblogs.com/cheshl/p/14042965.html