您的位置:首页 > 其它

93:Restore IP Addresses【回溯】【字符串】

2015-04-17 19:16 246 查看
题目链接:click~

/*题意:给出一串只含数字的字符串,返回所有合法的IP*/

/**
*思路: 对字符串进行分段处理,每段组成的数不能超过255,。将IP地址分为4段
* 每段有三种情况:
* 1)只取一个数字
* 2)取两个数字,第一个数不为0
* 3)取三个数字,第一个数字不为0,且三个数字组成的数小于256
*/

class Solution {
public:
//part表示第几段IP
void restoreIpAddresses(string &s, int start, int part, string ip, vector<string> &res) {
int len = s.size();
//剩下的数字过多
if(len - start > (4-part)*3) return;
//剩下的数字过少
if(len - start < (4-part)) return;
if(start == len && part == 4) {
//将ip中最后一个'.'去掉
res.push_back(ip.substr(0, ip.size()-1));
return;
}
int num = 0;
for(int i = start; i < min(start+3, len); i ++) {
//三种情况
num = num*10 + s[i] - '0';
if(num <= 255) {
ip += s[i];
restoreIpAddresses(s, i+1, part+1, ip+'.', res);
}
//如果第一个是0的话, 只考虑0的情况,不需要考虑0组成的地址
if(num == 0) break;
}
}
vector<string> restoreIpAddresses(string s) {
vector<string> res;
string ip;
restoreIpAddresses(s, 0, 0, ip, res);
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 字符串