题意:给出一串数字,求其所能组合成的有效的地址。
思路:DFS,按位寻找有效的地址。
class Solution {
public:
vector<string> re;
vector<string> restoreIpAddresses(string s) {
string tempre;
dfs(s, 3, tempre);
return re;
}
void dfs(string s, int level, string tempre) {
//cout << s << " " << tempre << endl;
if(level == 0 && s.length() != 0) {
if(s.length() > 3) return;
if(s[0] == '0' && s.length() > 1) return;
int addr = std::stoi(s); //cout << addr << endl;
if(addr <= 255 && addr >=0) {
tempre += s;
re.push_back(tempre);
}
return;
}
//cout << level << endl;
string mytempre;
for(int i = 0; i < 3 && i < s.length(); ++ i) {
mytempre += s[i]; //cout << mytempre << endl;
if(mytempre[0] == '0' && mytempre.length() > 1) continue;
int tempaddr = std::stoi(mytempre);
if(tempaddr >= 0 && tempaddr <= 255) {
string keep = mytempre + '.';
dfs(s.substr(i + 1, s.length() - i - 1), level - 1, tempre + keep);
}
}
return;
}
};