回溯函数通常指递归函数,而递归函数又是一种纯暴力搜索。
通常用来解决组合(不强调顺序)、切割、子集、排列(强调顺序)、棋盘等问题
一般格式:
void backtracking(参数){
if( 终止条件){
收集结果;//一般在叶子节点处收集结果
return;//return 空 推出函数
}
for(集合函数){
处理节点;
递归函数;
回溯操作;
}
例子:
40.组合ii
给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
candidates 中的每个数字在每个组合中只能使用一次。
说明:
所有数字(包括目标数)都是正整数。
解集不能包含重复的组合。