全排列算法—基于OC

来源:互联网 发布:淘宝老店新开 编辑:程序博客网 时间:2024/06/08 08:44

该算法用于求得指定字符串的全排列 按数组输出其结果。利用递归思想,如果字符串只有一个字符 则其全排列 就是这个字符。如果有两个呢? 就是在一个字符的全排基础上再加上这个字符的两个位置。三个字符的串 (abc):同理视为 全排(a + bc)+全排(b + ac)+全排(c + ab)的全排;

(注: 对于字符串的分割 以及存入数组等操作 以OC封装的NSString类作为基本 比较方便 至于C怎么实现 这里不做过多解释)


NSArray *sortalgorithm(NSString *strOfValue){    //用于存储全排序列    NSMutableArray *marrOfSort = [[NSMutableArray alloc] init];    <span style="white-space:pre"></span>//若字符串为单个字符 直接返回单个字符 的数组    if ([strOfValue length] == 0) {        [marrOfSort addObject:strOfValue];        return marrOfSort;    }    else    {        for (int i = 0; i < [strOfValue length]; i++) {            //依次选择分割哪一个字符            char OneOfChar = [strOfValue characterAtIndex:i];            NSMutableString *strOfDeleteOneChars = [NSMutableString stringWithString:strOfValue];          //分割字符串            [strOfDeleteOneChars deleteCharactersInRange:NSMakeRange(i, 1)];            NSArray *arrOfSub = sortalgorithm(strOfDeleteOneChars);/*递归*/            for (int j = 0; j < [arrOfSub count]; j++) {                NSString *strOfCombine = [NSString stringWithFormat:@"%c%@",OneOfChar,[arrOfSub objectAtIndex:j]];                [marrOfSort addObject:strOfCombine];                            }        }        return marrOfSort;        }}



0 0
原创粉丝点击