题目描述:
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
这次差点有没整出来
很明显的递归,一开始一点信心都没,但是还是完整写出来了
不错
class Solution {
List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
int dire[] = new int[n];
for (int i = 0; i < dire.length; i++) {
dire[i] = i + 1;
}
List<Integer> tem = new ArrayList<>();
getsub(result, tem, dire, k, 0);
return result;
}
public void getsub(List<List<Integer>> result, List<Integer> tem,int []n,int k,int dangqian){
if(tem.size() == k){
System.out.println(tem.toString());
List<Integer> news = new ArrayList<>(tem);
result.add(news);
return ;
}
for (int i = dangqian; i < n.length; i++) {
tem.add(n[i]);
getsub(result, tem, n, k, i + 1);
tem.remove(tem.size() - 1);
}
}
}
排名靠前的代码
思路一样,但是就是没人家的快
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> result = new ArrayList<>();
if(n < k){
return result;
}
getResult(n,k,1,result,new ArrayList<Integer>());
return result;
}
public void getResult(int n,int k,int index, List<List<Integer>> result, List<Integer> temp){
if(k == 0){
result.add(new ArrayList(temp));
return;
}
for(int i = index; i< n - k+2;i++){
temp.add(i);
getResult(n,k-1,i+1,result,temp);
temp.remove(temp.size()-1);
}
}
}