和BM22?比较版本号的题有点相似,都需要处理前导‘0’。看了一下BM22,很陌生,感觉刷题刷了也白刷。
关键:
递归。递归时需要注意判断的条件。
class Solution {
private:
string s;
vector<string> res;
string nums;
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return string字符串vector
*/
void dfs(int step, int index){
if(step == 4){
if(index != s.length())
return;
res.push_back(nums);
}
string tempStr = ""; //用于判断
int tempInt; //用于判断
for(int i = 0; i < 3 && (index+i < s.length()); i++){ //调试,加上index+i < s.length()
tempStr += s[index+i];
tempInt = stoi(tempStr);
//判断通过
if(tempInt<256 && (tempStr.length() == 1 || tempStr[0] != '0')){
string temp = nums; //用于回溯
//对nums进行增加字符
nums += tempStr;
if(step < 3){
nums += ".";
}
dfs(step+1, index+i+1);
nums = temp; //回溯
}
}
}
vector<string> restoreIpAddresses(string s) {
// write code here
this->s = s;
dfs(0,0);
return res;
}
};