-
题目:
-
给定两个整数
n
和k
,返回范围[1, n]
中所有可能的k
个数的组合。
你可以按 任何顺序 返回答案。
-
-
思路:采用回溯算法;
-
代码如下:
class Solution { //全局变量收集符合条件结果集 List<List<Integer>> result = new ArrayList<>(); //全局变量记录当前所在路径 LinkedList<Integer> path = new LinkedList<>(); public List<List<Integer>> combine(int n, int k) { //调用回溯算法 combineHelp(n,k,1); return result; } void combineHelp(int n,int k,int startIndex){ //终止条件 if(path.size()==k){ result.add(new LinkedList<Integer>(path)); return ; } //开始遍历 for(int i = startIndex;i <= n-(k-path.size())+1; i++){ //增加一个节点 path.add(i); //回溯 combineHelp(n,k,i+1); //弹出节点,从下一个开始 path.removeLast(); } } }