• 77. 组合


    给定两个整数 n 和 k,返回范围 [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

    1. class Solution {
    2. public:
    3. vectorint>> res;
    4. vector<int>path;
    5. void backtracking(int n,int k,int startindex){
    6. if(path.size() == k){
    7. res.push_back(path); // 把结果 放入res:
    8. return;//回退上一层
    9. }
    10. //不涉及 一些约束条件(和,或者数字的性质),只能从宽度上剪枝
    11. //当已经取了x个数,剩下的数字不够了,直接剪枝掉
    12. //k-path.size(),表示已经取的数。最多,从n-(k-path.size())+1,这个位置,后面能够取,再多一个,就凑不齐k个了。
    13. for(int i = startindex;i <= n-(k-path.size())+1;i++){
    14. path.push_back(i); //暂时 记录
    15. backtracking(n,k,i+1); // 开始进入下一层
    16. path.pop_back(); // 回退后,得把刚刚存入的 弹出
    17. }
    18. }
    19. vectorint>> combine(int n, int k) {
    20. backtracking(n,k,1);
    21. return res;
    22. }
    23. };

     

  • 相关阅读:
    CH58X/CH57X/V208的Broadcaster(广播者)例程讲解
    【Unity基础】1.项目搭建与视图编辑
    ECharts的高级使用
    Ps:变形
    如何在2023年学习React
    综合练习
    如何在 SwiftUI 中创建悬浮操作按钮
    Java | UDP协议
    list集合自定义排序
    JJJ:grep合集
  • 原文地址:https://blog.csdn.net/qq_63819197/article/details/133715929