文章目录
- 1 题目理解
- 2 回溯
1 题目理解
Given two integers n and k, return all possible combinations of k numbers out of 1 … n.
You may return the answer in any order.
输入:两个int n和k。
规则:从1到n,n个数选择k个数,做成组合。
输出:返回所有的组合
2 回溯
[1,n]每个数都可能选择或者不选择。
class Solution {private List<List<Integer>> answer;private int n;public List<List<Integer>> combine(int n, int k) {answer = new ArrayList<List<Integer>>();this.n = n;List<Integer> list = new ArrayList<Integer>();dfs(1,k,list);return answer;}private void dfs(int current,int k,List<Integer> list){if(list.size()==k){answer.add(new ArrayList<Integer>(list));return;}if(list.size() +(n-current+1)<k) return;if(current>n) return;list.add(current);dfs(current+1,k,list);list.remove(list.size()-1);dfs(current+1,k,list);}
}