day64—回溯—组合数(LeetCode-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、确定函数返回值:void(单纯处理参数)

2、确定参数类型:引入的条件

3、首行给出结束条件:个数count == 题给要求的 k 即可

4、单层循环逻辑:加入后一个数,作为组合

函数源码:

class Solution {
public:

    void back(vector>&ans,vector&comb,int& count,int pos,int n,int k){
        if(count==k){
            ans.push_back(comb);
            return;
        } 
        for(int i=pos;i<=n;i++){
            comb[count++]=i;
            back(ans,comb,count,i+1,n,k);//递归迭代 comb[1]
            count--;    //还原 comb[0]
        }
    }

    vector> combine(int n, int k) {

        vector>ans;
        vector comb(k,0);
        int count=0;
        back(ans,comb,count,1,n,k);
        return ans;

    }
};

你可能感兴趣的:(算法,算法,leetcode,DFS)