在复原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继续判断。