iOS之从N个数里面取M个数的组合算法
生活随笔
收集整理的這篇文章主要介紹了
iOS之从N个数里面取M个数的组合算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原理分析
一個數組 data 有 N 個元素,從中選取 M 個數的組合 array(不分順序),可使用遞歸算法實現,過程如下:
- 選擇 data 的第 1 個元素為 array 的第一個元素,即:array[0] = data[0];
- 在 data 第一個元素之后的其它元素中,選取其余的 M - 1 個數,這是一個上述問題的子問題,遞歸即可;
- 依次選擇 data 的第 2 到 N - M + 1元素作為起始點,再執行1、2步驟;
- 遞歸算法過程中的 M = 0 時,輸出 array 的所有元素。
Objective-C實現
// 源數組 @property (nonatomic, strong) NSMutableArray *dataArray; // 過度數組 @property (nonatomic, strong) NSMutableArray *tempArray; // 結果數組 @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實現
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}}總結
以上是生活随笔為你收集整理的iOS之从N个数里面取M个数的组合算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Metal之渲染绘制三角形
- 下一篇: Swift之数组去重(去除重复元素)