版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Apple_hzc/article/details/83311476
一、Description
Given two integers n and k, return all possible combinations of k numbers out of 1 ... n.
题目大意:
给定一个n和k,返回所有长度为k的1-n的组合。
Example:
Input: n = 4, k = 2 Output: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
二、Analyzation
这个题第一想法就是DFS,通过一个temp不断地加入for循环中所有可能出现的数字,直到递归层数等于k,则将temp加入到list中,最后返回list即可。
三、Accepted code
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
if (k <= 0) {
return list;
}
dfs(1, n, k, list, new ArrayList<Integer>());
return list;
}
public void dfs(int index, int n, int k, List<List<Integer>> list, List<Integer> temp) {
if (k == 0) {
list.add(new ArrayList<Integer>(temp));
return ;
}
for (int i = index; i <= n; i++) {
temp.add(i);
dfs(i + 1, n, k - 1, list, temp);
temp.remove(temp.size() - 1);
}
}
}