菜鸡每日一题系列打卡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();}}}
代码分析
对代码进行分析,时间复杂度为

空间复杂度为

执行结果


学习 | 工作 | 分享

👆长按关注“有理想的菜鸡”
文章转载自有理想的菜鸡,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




