菜雞每日一題系列打卡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();
}
}
}
代碼分析
對代碼進行分析,時間複雜度爲
空間複雜度爲
執行結果
學習 | 工作 | 分享
????長按關注“有理想的菜雞”
只有你想不到,沒有你學不到