美文网首页
iOS 求笛卡尔积写法

iOS 求笛卡尔积写法

作者: 离人萧 | 来源:发表于2016-08-18 23:27 被阅读237次

求任意数组笛卡尔积 OC Swift 写法

NSMutableArray *arr = [NSMutableArray array];

[arr addObject:@[@"1",@"2",@"3"]];
[arr addObject:@[@"4",@"5",@"6"]];
[arr addObject:@[@"7",@"8",@"9"]];

NSMutableArray *result = [NSMutableArray array];

[self Descartes:arr result:result layer:0 curstring:@""];  

求这三个数组的笛卡尔积 ,结果应该是 有27个。

具体实现:

-(void)Descartes:(NSMutableArray <NSMutableArray <NSString *>*>*)dimvalue  result:(NSMutableArray <NSString *>*)result layer:(NSInteger)layer curstring:(NSString *)curstring{

if (layer < (dimvalue.count - 1)) {
    
    if (dimvalue[layer].count == 0) {
        [self Descartes:dimvalue result:result layer:layer + 1 curstring:curstring];
    }else{
        
        for (int i = 0; i < dimvalue[layer].count; i++) {
            
            [self Descartes:dimvalue result:result layer:layer + 1 curstring:[NSString stringWithFormat:@"%@%@",curstring,dimvalue[layer][i]]];
        }
    }
    
}else if (layer ==dimvalue.count - 1){
    
    if (dimvalue[layer].count == 0) {
        
        [result addObject:curstring];
    }else{
        
        for (int i = 0; i < dimvalue[layer].count; i++) {
            
            NSString *string = [NSString stringWithFormat:@"%@%@",curstring,dimvalue[layer][i]];
            [result addObject:string];
        }
        
    }
}

}

结果:

Paste_Image.png

Swift:

 var arr : [[String]] = [["1","2","3"],["4","5","6"],["7","8","9"]]
 var result : [String] = []

func Descartes(inout dimvalue : [[String]],inout result : [String],layer : NSInteger ,curstring : String){

if layer < dimvalue.count - 1 {
    
    if dimvalue[layer].count == 0 {
        
        Descartes(&dimvalue, result: &result, layer: layer, curstring: curstring)
    }else{
        
        for (index, _) in dimvalue[layer].enumerate() {
            
            Descartes(&dimvalue, result: &result, layer: layer + 1, curstring: curstring + dimvalue[layer][index])
        }
    }
    
}else if(layer == dimvalue.count - 1){
    
    if dimvalue[layer].count == 0 {
        
        result.append(curstring)
    }else{
        
        for (index, _) in dimvalue[layer].enumerate() {
            
            result.append(curstring + dimvalue[layer][index])
        }
        
    }
    
}

}

Descartes(&arr, result: &result, layer: 0, curstring: "")

print(result)

相关文章

  • iOS 求笛卡尔积写法

    求任意数组笛卡尔积 OC Swift 写法 求这三个数组的笛卡尔积 ,结果应该是 有27个。 具体实现: 结果: ...

  • 求dataframe的笛卡尔积

    方法1:共同键 建立相同的键,这个键可以是索引; 再对该相同的键,用merge处理。但此方法效率较低 方法2:nu...

  • python 多重循环之product

    正常的我们要实现 写法是: 现在就可以用: 用的是笛卡尔积。效果是一样的。

  • 三、连接查询

    内连接 1、笛卡尔积 语法 无条件筛选 有条件筛选 什么是笛卡尔积?笛卡尔积就是将A和B表中的行任意组合,得到一个...

  • 笛卡尔积

    笛卡尔积,是指集合A中元素与B中元素所有的两两组合。 如A=(a,b),B=(1,2),那么笛卡尔积为(a1,a2...

  • 笛卡尔积

    笛卡尔乘积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积表示为...

  • 笛卡尔积

    之前写一个SKU的插件,用到了【笛卡尔积】,明白其原理,但是就是写不出来 看来功力尚浅,需要努力 后来借鉴了网上的...

  • 笛卡尔积

    1.什么笛卡尔积 百科:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又...

  • 笛卡尔积

    Pandas如何实现相当于SQL交叉连接(笛卡尔积) https://www.cnpython.com/qa/14...

  • 笛卡尔积

    首先知道啥是笛卡尔积,百度百科中解释是这样的: 笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesia...

网友评论

      本文标题:iOS 求笛卡尔积写法

      本文链接:https://www.haomeiwen.com/subject/rxfbsttx.html