力扣--深度优先算法/回溯算法77.组合

回溯算法是深度优先算法的一种特殊情况。

思路分析:

  1. 深度优先搜索 (DFS): 通过递归实现,从起始数字开始遍历,逐步构建可能的组合。
  2. 递归函数 dfs
    • 接收参数:result 为最终结果集,smallresult 为当前正在生成的组合,n 为总数字范围,k 为组合长度,start 为当前选择的起始位置。
    • 逐个尝试可能的数字,构建临时结果集。
    • 如果临时结果集大小等于目标长度 k,将其加入最终结果集。
    • 否则,继续递归生成组合,注意起始位置更新为 i+1,避免重复选择元素。
    • 回溯过程中,撤销选择,继续尝试其他可能的组合。
  3. 主函数:
    • 创建空的结果集 result 和临时结果集 smallresult
    • 调用深度优先搜索函数 dfs,从数字 1 开始生成组合。
    • 返回最终结果。
class Solution {
    // 定义深度优先搜索函数,用于生成组合
    void dfs(vector<vector<int>>& result, vector<int>& smallresult, int n, int k, int start) {
        // 遍历当前可能的组合元素
        for (int i = start; i <= n; i++) {
            // 将当前元素加入临时结果集
            smallresult.push_back(i);

            // 如果临时结果集大小达到目标值 k,将其加入最终结果集
            if (smallresult.size() == k)
                result.push_back(smallresult);
            // 否则,继续递归生成组合,注意起始位置更新为 i+1,避免重复选择元素
            else
                dfs(result, smallresult, n, k, i + 1);

            // 回溯,撤销选择,继续尝试其他可能的组合
            smallresult.pop_back();
        }
        return;
    }

public:
    // 主函数,生成给定范围 [1, n] 中长度为 k 的所有组合
    vector<vector<int>> combine(int n, int k) {
        // 存储最终结果的二维数组
        vector<vector<int>> result;
        
        // 存储当前正在生成的组合的临时结果
        vector<int> smallresult;

        // 调用深度优先搜索函数,从数字 1 开始生成组合
        dfs(result, smallresult, n, k, 1);

        // 返回最终结果
        return result;
    }
};

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值