通过万岁!!!
- 题目:给你两个数,分别是n和k,要求找到所有1到n中取k个的组合情况。
- 思路:首先我们定义一个长度为k的数组,然后开始对里面的内容进行填充,填充的值为i,每次填充完这个以后,然后递归往下,填充下一个位置,下一个位置从i+1开始填充。如果我们的下标等于k了,表示找到了一组,然后记录结果即可。
- 技巧:递归
java代码
class Solution {
int[] temp;
int k;
List<List<Integer>> ans = new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
this.k = k;
temp = new int[k];
getList(1, n, 0);// 从i开始到n,放k个
return ans;
}
public void getList(int begin, int end, int idx) {
if (idx == k) {
List<Integer> list = new ArrayList<>();
for (int j : temp) {
list.add(j);
}
ans.add(list);
return;
}
for (int i = begin; i <= end; i++) {
temp[idx] = i;
getList(i + 1, end, idx + 1);
}
}
}
- 总结:这个题目很难,关键在于我们需要用到一个数组来记录我们存储的组合情况。