菜鸡每日一题系列打卡77天
每天一道算法题目
小伙伴们一起留言打卡
坚持就是胜利,我们一起努力!
题目描述(引自LeetCode)
给定两个整数n和k,返回1 ... n中所有可能的k个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
题目分析
这道题目我们可以采用回溯法来实现,之前的文章中已经说过,所谓的回溯,就是不断试探,如果可行则继续向下试探,否则返回上一步继续试探。
组合问题是回溯法的经典应用。话不多说,上代码!
代码实现
class Solution {
private List<List<Integer>> result = new LinkedList();
public List<List<Integer>> combine(int n, int k) {
backtrack(n, k, 1, new LinkedList<Integer>());
return result;
}
private void backtrack(int n, int k, int start, LinkedList<Integer> tmp) {
if (tmp.size() == k) result.add(new LinkedList(tmp));
for (int i = start; i <= n; i++) {
tmp.add(i);
backtrack(n, k, i + 1, tmp);
tmp.removeLast();
}
}
}
代码分析
对代码进行分析,时间复杂度为
空间复杂度为
执行结果
学习 | 工作 | 分享
????长按关注“有理想的菜鸡”
只有你想不到,没有你学不到