刷代码随想录有感(78):回溯算法——关于树枝/树层去重的思考(涉及break/continue的使用)

复原IP地址中,剪枝操作我们使用的是break:

if(isvalid(s, start, i)){
    s.insert(s.begin() + i + 1, '.');
    pointNum++;
    backtracking(s, i + 2, pointNum);
    s.erase(s.begin() + i + 1);
    pointNum--;
}else break;

在其他情况,举个例子,在含有重复元素求全排列中用continue:

if(i > 0 && nums[i] == nums[i - 1] && used[i - 1] == 0){
    continue;//树层去重
}
if(used[i] == 1)continue;//树枝去重

这两个到底有什么不同?

continue与break同属于树层去重,continue可以让后面继续选,break是后面都不能选:

对IP这题分析,在不符合isvalid函数判断后再往后肯定都不符合(start不断向后移动),武断,所以用break最为合适;对于其他题目而言,只是某一个数字不符合,下一个未必不行,所以continue继续判断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值