日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

iOS之从N个数里面取M个数的组合算法

發(fā)布時(shí)間:2024/5/21 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS之从N个数里面取M个数的组合算法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原理分析

一個(gè)數(shù)組 data 有 N 個(gè)元素,從中選取 M 個(gè)數(shù)的組合 array(不分順序),可使用遞歸算法實(shí)現(xiàn),過程如下:

  • 選擇 data 的第 1 個(gè)元素為 array 的第一個(gè)元素,即:array[0] = data[0];
  • 在 data 第一個(gè)元素之后的其它元素中,選取其余的 M - 1 個(gè)數(shù),這是一個(gè)上述問題的子問題,遞歸即可;
  • 依次選擇 data 的第 2 到 N - M + 1元素作為起始點(diǎn),再執(zhí)行1、2步驟;
  • 遞歸算法過程中的 M = 0 時(shí),輸出 array 的所有元素。

Objective-C實(shí)現(xiàn)

// 源數(shù)組 @property (nonatomic, strong) NSMutableArray *dataArray; // 過度數(shù)組 @property (nonatomic, strong) NSMutableArray *tempArray; // 結(jié)果數(shù)組 @property (nonatomic, strong) NSMutableArray *resultArray;- (void)viewDidLoad {[super viewDidLoad];self.dataArray = [[NSMutableArray alloc]init];[self.dataArray setArray:@[@"1",@"2",@"3",@"4",@"5"]];self.resultArray = [[NSMutableArray alloc]init];self.tempArray = [NSMutableArray arrayWithArray:@[@"0",@"0",@"0",@"0",@"0"]];[self combination:self.dataArray total:5 choose:5];NSLog(@"%@",self.resultArray); }- (void)combination:(NSMutableArray *)dataArray total:(int)n choose:(int)m {if (m == 0) {[_resultArray addObject:[NSArray arrayWithArray:_tempArray]];return;}for (int i = n; i >= m; i--) {[_tempArray replaceObjectAtIndex:m-1 withObject:[_dataArray objectAtIndex:i-1]];[self combination:dataArray total:i-1 choose:m-1];} }

Swift實(shí)現(xiàn)

var resultArray : [Int] = []var tempArray : [Int] = []override func viewDidLoad() {super.viewDidLoad()self.tempArray = [0,0]self.resultArray = []var numberArray : [Int] = [0,1,6,9,8]self.combination(dataArray: numberArray, n: numberArray.count, m: self.tempArray.count)print(self.resultArray)}func combination(dataArray:[Int], n: Int, m: Int) {if m == 0 {resultArray.append(contentsOf: tempArray)return}var i = nwhile i >= m {tempArray[m - 1] = dataArray[i - 1]combination(dataArray: dataArray, n: i - 1, m: m - 1)i -= 1}}

總結(jié)

以上是生活随笔為你收集整理的iOS之从N个数里面取M个数的组合算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。