回溯专题

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(level
str.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);
}
}
}
};删除线格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值