
Objective-C实现给定两个数字 n 和 k,使 k 数字的所有唯一组合从 1 到 n 并按排序顺序算法(附完整源码)
发布日期:2025-04-27 00:13:55
浏览次数:4
分类:精选文章
本文共 1173 字,大约阅读时间需要 3 分钟。
在 Objective-C 中实现一个算法,用于生成从 1 到 n 的所有 k 个数字的唯一组合,可以通过递归方法来实现。以下是一个完整的代码示例:
#import@interface CombinationGenerator : NSObject- (void)combineFrom:(NSInteger)n withK:(NSInteger)k;- (void)generateCombinationsWithCurrent:(NSArray *)current;@end
以下是代码的实现:
@implementation CombinationGenerator- (void)combineFrom:(NSInteger)n withK:(NSInteger)k { if (k == 0) { return; } NSInteger numbers[] = {1, 2, 3, ..., n}; NSMutableArray *combinations = [NSMutableArray new]; [self generateCombinationsWithCurrent:combinations];}- (void)generateCombinationsWithCurrent:(NSMutableArray *)current { if ([current count] == k) { [combinations addObject:current]; return; } for (NSInteger i = 0; i < n; i++) { [current addObject:i+1]; [self generateCombinationsWithCurrent:current]; [current removeLastObject]; }}
这个递归算法的思路是:首先初始化一个包含从 1 到 n 的数组,然后使用递归方法生成所有可能的 k 元组。递归终止条件是当前组合的长度等于 k,此时将组合添加到结果列表中。递归过程中,逐个元素地从数组中选择,确保每个组合都是唯一的。
这种方法的核心思想是利用回溯算法,通过逐步构建组合并在回溯时撤销选择,来生成所有可能的组合。这种方法的时间复杂度为 O(n choose k) ,因为在最坏情况下需要生成所有可能的组合。
该算法在数据生成和回溯算法中应用广泛,尤其是在需要生成所有可能组合的场景中。例如,用于生成组合、子集、排列等问题。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月17日 19时55分45秒
关于作者

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