每日一题——组合

菜鸡每日一题系列打卡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();
        }
    }
    
}

代码分析

对代码进行分析,时间复杂度为

空间复杂度为

执行结果

学习 | 工作 | 分享

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章