每日一題——組合

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

代碼分析

對代碼進行分析,時間複雜度爲

空間複雜度爲

執行結果

學習 | 工作 | 分享

????長按關注“有理想的菜雞

只有你想不到,沒有你學不到

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