leetcode--
发布日期:2025-04-05 02:28:16 浏览次数:10 分类:精选文章

本文共 1117 字,大约阅读时间需要 3 分钟。

题目描述中提到,给定两个整数n和k,要求返回从1到n中选出k个数的所有可能组合。例如,当n=4,k=2时,组合结果为[2,4]、[3,4]、[2,3]、[1,2]、[1,3]和[1,4]。从问题本身来看,解决方案可以使用递归方法来生成所有可能的组合。

在解法分析中,我们采用类似深度搜索的递归策略来构造组合。具体来说,递归函数会逐个考虑当前选项,将其加入结果中,然后继续处理剩余的元素。例如,我们可以选择一个起始点,逐步将数字添加到当前组合中,并在每一步递归处理剩余的可能选择。

下面的C++代码展示了实现这一思路的详细过程。包括了一个通用的组合生成函数myCombine,它接受当前结果的引用、当前组合的引用、以及要处理的起始点和剩余的数字数量。函数通过选择的方式来构造组合,并在找到每个可能的组合时,将其添加到结果中。

#include 
using namespace std;vector
> combine(int n, int k) { vector
> result; if (n < k || n <= 0 || k < 0) { return result; } vector
cur; myCombine(result, cur, 1, n, k); return result;}void myCombine(vector
> &result, vector
&cur, int start, int n, int k) { if (k == 0) { result.push_back(cur); return; } if (start > n) { return; } cur.push_back(start); myCombine(result, cur, start + 1, n, k - 1); cur.pop_back(); myCombine(result, cur, start + 1, n, k);}

通过这种方法,我们可以生成所有符合条件的组合。随着递归的深入,我们逐步构建每一种可能性,最终将它们添加到结果中。这种方式对于处理较大值的n和k非常有效,并且能够处理一个典型的组合生成问题。

上一篇:LeetCode--020--括号匹配
下一篇:LeetCode(229):Majority Element ||

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月18日 10时20分27秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章