day24 | 回溯1

0.引言

1.理論基礎

77.# 組合

Category Difficulty Likes Dislikes
algorithms Medium (77.26%) 1323 -

給定兩個整數 nk,返回范圍 [1, n] 中所有可能的 k 個數的組合。

你可以按 任何順序 返回答案。

示例 1:

輸入:n = 4, k = 2
輸出:
[
  [2,4],
  [3,4],
  [2,3],
  [1,2],
  [1,3],
  [1,4],
]

示例 2:

輸入:n = 1, k = 1
輸出:[[1]]

提示:

  • 1 <= n <= 20
  • 1 <= k <= n

Discussion | Solution

回溯

起始本質都是遞歸都是深搜

/*
 * @lc app=leetcode.cn id=77 lang=cpp
 *
 * [77] 組合
 */

// @lc code=start
class Solution {
 public:
  vector<vector<int>> combine(int n, int k) {
    std::vector<int> one_combine;
    std::vector<std::vector<int>> res;
    dfs(n, k, one_combine, res, 1);
    return res;
  }

 private:
  void dfs(int n, int k, std::vector<int>& one_combine,
           std::vector<std::vector<int>>& res, int start_idx) {
    if (one_combine.size() == k) {
      res.push_back(one_combine);
      return;
    }

    for (int i = start_idx; i <= n; ++i) {
      one_combine.push_back(i);
      dfs(n, k, one_combine, res, i + 1);  // i 為隱式回溯
      one_combine.pop_back();
    }
  }
};
// @lc code=end

剪枝

挖坑

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容