写的头疼,终于过了
class Solution {
public:
vector<string> tmp = vector<string>(4);
vector<string> result;
string s;
stack<int> last;
int index = 0;
void get(int x){
tmp[index - 1] = s.substr(last.top(), x - last.top() + 1);
}
void get_end(int x){
tmp[index - 1] = s.substr(x, s.size() - 1);
}
void get_result(){
string ss = tmp[0];
for(int i = 1; i < 4; i ++){
ss += ".";
ss += tmp[i];
}
this->result.push_back(ss);
}
bool notValid(int x){
string ts = s.substr(last.top(), x - last.top() + 1);
for(int i = 0; i < ts.size(); i ++){
if (ts[i] > '9' || ts[i] < '0') { // 遇到非数字字符不合法
return true;
}
}
if(stoi(ts) > 255){
return true;
}
if(ts.size() > 1 && ts[0] == '0'){
return true;
}
return false;
}
bool notValid_end(int x){
string ts = s.substr(x, s.size());
for(int i = 0; i < ts.size(); i ++){
if (ts[i] > '9' || ts[i] < '0') { // 遇到非数字字符不合法
return true;
}
}
if(ts.size() == 0){
return true;
}
if(stoi(ts) > 255){
return true;
}
if(ts.size() > 1 && ts[0] == '0'){
return true;
}
return false;
}
void dfs(int x){
if(x - last.top() + 1 > 3 || s.size() - x - 1 > 3 * (3 - index) || notValid(x)){
return;
}
index ++;
get(x);
if(index == 3){
index++;
if(notValid_end(x + 1)){
index -= 2;
return;
}
get_end(x + 1);
get_result();
index--;
}
last.push(x + 1);
for(int i = x + 1; i < s.size(); i ++){
dfs(i);
}
index--;
last.pop();
}
vector<string> restoreIpAddresses(string s) {
this->s = s;
last.push(0);
for(int i = 0; i < s.size(); i ++){
dfs(i);
}
return result;
}
};