您的位置:首页 > 其它

[LeetCode] Restore IP from string 从字符串恢复IP地址

2014-12-07 13:43 429 查看
Given a string containing only digits, restore it by returning all possible valid IP address combinations. For example: Given
"25525511135"
,
return
["255.255.11.135", "255.255.111.35"]
. (Order does not matter)
思路:用递归的方法。IP地址是点分十进制,一共有4个part,每个part大于等于0,小于等于255。递归时,要传递part number,当part number等于4的时候,说明IP地址恢复完成。另外,要注意,每个part的范围必须是在[ 0, 255 ]内,而且要避免出现以0开头的part,比如010是没有意思的,“0.10.010.1”。
代码如下:

vector<string> restoreIpAddresses(string s) {
// main function
vector<string> col;
string ip;
partitionIP(s, 0, 0, ip, col);
return col;
}

void partitionIP(string s, int startIndex, int partNum,
string resultIp, vector<string>& col)
{// utility function
//max 3 bits per partition
if(s.size() - startIndex > (4-partNum)*3) return;
//min 1 bit per partition
if(s.size() - startIndex < (4-partNum)) return;
if(startIndex == s.size() && partNum ==4)
{
resultIp.resize(resultIp.size()-1);
col.push_back(resultIp);
return;
}
int num =0;
for(int i = startIndex; i< startIndex +3; i++)
{
num = num*10 + (s[i]-'0');
if(num<=255)
{
resultIp+=s[i];
partitionIP(s, i+1, partNum+1, resultIp+'.', col);
}
if(num ==0)//0.0.0.0 valid, but need to avoid 0.1.010.01
{
break;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: