这道题的意思是,给出一个字符串,写出这个字符串可以构成那些ip地址。IP地址有四个数字,每一个数字的范围都是[0,255],而且要注意没一个数都不能是0开头。
单独写一个函数判断一个字符串是不是合法的IP地址中的某一个数。
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> res;
backtracking(s, res, 4, "");
return res;
}
void backtracking(string s, vector<string>& res, int k, string str)
{
if(k == 0)
{
if(s.empty()) res.push_back(str);
return;
}
for(int i = 1; i <= 3; ++i)
{
if(i <= s.size() && isvalid(s.substr(0, i))){
if(k == 1)
backtracking(s.substr(i), res, k-1, str + s.substr(0, i));
else
backtracking(s.substr(i), res, k-1, str + s.substr(0, i) + ".");
}
}
}
bool isvalid(string s)
{
if(s.size() == 0 || s.size() > 3 || (s.size() > 1 && s[0] == '0'))
return false;
int n = atoi(s.c_str());
return (n >= 0) && (n <= 255);
}
};