DFS与回溯专题:组合
题目链接: 77.组合
参考题解:代码随想录
题目描述
代码思路
该题为经典回溯问题,题目要求k个数来组合,则利用回溯来进行k层for循环。为了防止重复遍历,要用start参数标记每次for循环遍历的起点。
同时,循环停止的条件,最普通就是用题目给的n。然后参考代码随想录,发现是可以剪枝的。举个例子。n=10,k=5。一共需要组合5个数,当你已经确定了前3个数,那第4个数最多只能搜索到9,因为至少要留个10给第5个数。这样,每次循环时都可以进行剪枝。
代码纯享版
未剪枝的情况
class Solution {
public List<List<Integer>> list_all = new ArrayList();
public List<Integer> list = new ArrayList();
public List<List<Integer>> combine(int n, int k) {
backtrack(n, k, 1);
return list_all;
}
void backtrack(int n, int k, int start)