class Solution {
public:
std::vectorstd::string restoreIpAddresses(const std::string &str) {
std::vectorstd::string res{};
if (str.empty()) return res;
dfs(str,0,0,"",res);
return res;
}
void dfs(const std::string &str, int level, int done, std::string item, std::vectorstd::string &res) {
if(done4) {//进行剪枝,判断是否正好已经加上了三个点
if(levelstr.size()) {
res.emplace_back(item);
}
} else {
for (int i=1;i<4;++i) {//注意,这里别忘了判断是否剩下的长度还够用,首先也是要判断是否越界
if (level+i > str.size()) {//注意这里是str.size()而不是str.size()-1!!!加一减一问题一定要非常小心,末尾是level+i-1<<size-1,因此
break;
}
int cur = std::stoi(str.substr(level,i));
if(cur>255||std::to_string(cur).size()!=i) continue;
dfs(str,level+i,done+1,item+str.substr(level,i)+ (done == 3 ? “” : “.”), res);
}
}
}
};删除线格式
回溯专题
最新推荐文章于 2022-03-18 20:13:10 发布