您的位置:首页 > 其它

[leetcode]Restore IP Addresses

2014-04-21 08:36 411 查看


Restore IP Addresses

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)
解题思路:递归遍历

void push(string &str, int start, int n, string &retStr){
for(int i = 0; i < n; i++){
retStr.push_back(str[start + i]);
}
}
void pop(string &retStr, int n){
for(int i = 0; i < n; i++){
retStr.pop_back();
}
}
void innserRestoreIP(string str, int start, int dot, string rets, vector<string> & vs){
int slen = str.size();
int gap = slen - start;
if(0 == dot){
//如果剩下数字大于3或没有剩,或剩下2个以及以上第一个不能以0开头
if(gap > 3 || 0 == gap || (gap > 1 && '0' == str[start])) return;
string s(str, start, gap);
if(atoi(s.c_str()) > 255) return; //剩下的数字大于255也不合法
push(str, start, gap, rets);
vs.push_back(rets);
return;
}
if(start < slen){
push(str, start, 1, rets);  //先取一个字符
rets.push_back('.');
innserRestoreIP(str, start + 1, dot - 1, rets, vs);
pop(rets, 2);
}
if(str[start] != '0'){ //取两或三个字符但不能以0开头
if(start + 1 < slen){
push(str, start, 2, rets);
rets.push_back('.');
innserRestoreIP(str, start + 2, dot - 1, rets, vs);
pop(rets, 3);
}
if(start + 2 < slen){
string tmpStr(str, start, 3);
if(atoi(tmpStr.c_str()) <= 255){
push(str, start, 3, rets);
rets.push_back('.');
innserRestoreIP(str, start + 3, dot - 1, rets, vs);
pop(rets, 4);
}
}
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> vs;
string rets;
innserRestoreIP(s, 0, 3, rets, vs);  //源始字符串,下标0,句点的个数

return vs;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: