|
今天上午同事在rtx群里面发了这样一张图片,挺有意思的哈,地球人已经阻止不了程序猿哥了。只要懂一点程序的人都知道这段代码是干什么用的(这应该是java吧),这就是根据index数组里面的值从另外一个数组arr里面读取值,然后组成一个电话号码字符串。 后面的结果电话号码是:18013820100 (ps 貌似这个电话打不通哈) 中午吃饭的时候,想了下,这里 arr 应该有 n! 中可能(n代码电话号码去重后的数字个数),这里就是高中数学的排列组合知识,然后根据 arr 数组确定 index 数组。 其实就像高中数学老师讲的一样,第一位有n种选择,第二位有 n - 1 种选择,以此类推,然后将这种解决方式列举出来,下面就是相关代码。 - - (void)allPermutationsOfArray:(NSArray *)array {1 t: h) p: ^6 ~# T& u5 G) c6 I
- // 最终的排列数组
" k$ l2 l. B6 {3 d- ^ - NSMutableArray *permutations = [NSMutableArray new];
7 `; I, T. ?) ] - for (NSInteger i = 0; i < [array count]; i++) {
% u# q& U( N T; R+ H& S - if ([permutations count] == 0) {
! k" o8 w% K1 g) k: V1 a6 D2 s - for (id item in array ) {7 g( k1 ^& N1 t" ~, c+ x- C
- // 将数组里面的每个元素都作为一个数组
) A; U, A" k7 N& _1 C: h - [permutations addObject:[NSMutableArray arrayWithObject:item]];9 {4 X9 ^6 a- R# t0 Q
- }& ~- i0 a" C* @. W* }
- } else {
6 c% l" d# W" ~. n3 N: W, ? - NSMutableArray *permutationsCopy = [permutations mutableCopy];
/ q4 q! U" g. @, w, Z" { - [permutations removeAllObjects];
) l/ p5 ^/ D# ^ - for (id item in array ) {/ D) P) Q( ?4 L( x6 @) {
- for (NSMutableArray *partialList in permutationsCopy) {
9 g; M8 n' s( ~. |1 L' ^6 Y - // 遍历 看已排列的数组里面是否包含 某个元素 如果没包含 则加入该元素 类型于 1->12->123->1234 这个过程 这里的顺序由传入的array元素顺序决定
P+ E6 q! r" b+ [& [3 b - if (![partialList containsObject:item]) {& y- s5 T& O8 F1 w- f/ a+ I( ^5 I
- NSMutableArray *partialNewList = [@[] mutableCopy];& u5 t4 H% ?# t, s2 _6 E/ Q4 F( _" j
- // 将不包含的元素 加入前面 符合我们的习惯
" s7 ?$ ^) H: o2 \; F E - [partialNewList addObject:item];! a; H( y" D7 r# S/ o
- [partialNewList addObjectsFromArray:partialList];
2 X! J- _& }; P -
+ y7 @' L) R j7 O, Y3 ?1 |% ]7 G - [permutations addObject:partialNewList];
! s; l0 d+ E% u' Q - }' ?% V$ m7 h& |0 N
- }7 L: c8 k% e: `( v% l6 M
- }
+ A+ S2 L9 D! O) P9 ^/ |: u - }0 t- M; W# O$ X0 n- X- e
- }
: G J5 m; F: X) K% q - NSLog(@"permutations count:%@", @(permutations.count));
9 w0 ? C% S9 O( |8 I: E - [self printArrayInLine:permutations];+ I2 t" H+ P" H) Q
- }
_ {. s1 E' u0 u6 c - M) b& s* s8 G5 j
- - (void)printArrayInLine:(NSArray *)twoDimensionArray {
2 h: N# b3 M4 c( \; R - for (NSArray *array in twoDimensionArray) {
" |5 H$ b: L& |, f2 [# c7 g - NSString * result = [[array valueForKey:@"description"] componentsJoinedByString:@""];
( S+ p N$ a- g9 _( i' e; v - NSLog(@"%@",result);
6 |; k/ u; Z7 r5 ^& a1 n6 E# B - }$ H1 b% C* l1 x/ m5 n1 }
- }' F0 h% G6 Q, y' S
* P- H) Y0 \6 E3 Z& _6 I- - (NSMutableArray *)getIndexArray:(NSMutableArray *)array phone:(NSString *)phone {* M& L' d: P# Y" v5 F
- __block NSMutableArray *indexArray = [@[] mutableCopy];6 M8 v* @/ i- T+ m; C+ X& E) p
- [results enumerateObjectsUsingBlock:^(NSString *_Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) {
+ o4 c: M& w; J0 h' L' q% c - [indexArray appendObject:[self indexString:obj phone:phone]];
) `& C5 i. F5 r8 j h z - }];0 e1 i; @; i6 A, V$ x/ n' \3 R
- return indexArray;
/ S1 N6 I8 O: Q - }
* o5 w3 o' q y" R- l2 J3 O - ; }2 O2 ?7 I" _, T) r% m q- _! s
- - (NSString *)indexString:(NSString *)s phone:(NSString *)phone {, Z# d1 I1 {# F+ D
- NSString *indexString = @"";
0 g% w6 I0 v" V* i* E' \8 ^8 K - NSMutableArray *sArray = [@[] mutableCopy];4 s u5 [) k/ R& m( b! l* a2 ^7 J
- NSMutableArray *phoneArray = [@[] mutableCopy];
- r7 K; U m T4 y" c0 i - for (NSInteger i = 0; i < [s length]; i++) {1 U _ m% K" D4 {7 B' o% ~4 c
- [sArray addObject:[NSString stringWithFormat:@"%c", [s characterAtIndex:i]]];
- w& v& S; A9 q8 k# `! C' ?6 d - }' m6 k3 Q% G0 o; I* d2 m+ L
- for (NSInteger i = 0; i < [phone length]; i++) {
0 {1 g8 G: e% I0 q N2 |( V1 E. A - [phoneArray addObject:[NSString stringWithFormat:@"%c", [phone characterAtIndex:i]]];! h3 ?: a1 [6 G- |) }
- }
1 r4 ~+ z; x, [$ e8 `& y - for (NSInteger i = 0; i < [phoneArray count]; i++) {
: e8 t0 N: _( O - NSUInteger index = [sArray indexOfObject:phoneArray[i]];, M- y1 I5 x( J* P
- indexString = [indexString stringByAppendingString:@(index).stringValue];4 ^ A1 G1 i% O S7 \/ E
- }* ~4 H5 b9 ?8 h: j# \5 n
- return indexString;
4 L: Y( }7 `' I - }
复制代码Google search keywords: objective-c array permutation combination factorial 排列 组合 阶乘
9 a% W+ V K& G/ T4 Y |