天天看點

對字元串 “ABC” 所有子集的列舉

/***
 * 引用:http://data.biancheng.net/view/34.html
 * 對字元串 “ABC” 所有子集的列舉(使用回溯法-這裡實際上是二叉樹的深度優先周遊)
 *從集合的開頭元素開始,對每個元素都有兩種選擇:取還是舍。當确定了一個元素的取舍之後,
再進行下一個元素,直到集合最後一個元素。其中的每個操作都可以看作是一次嘗試,
每次嘗試都可以得出一個結果。将得到的結果綜合起來,就是集合的所有子集。
 *
 */

void allPermutation(char* str,NSString* buffer){
    if (*str == '\0') {
        NSLog(@"buffer:%@",buffer);
    }else{
        allPermutation(str + 1,[buffer stringByAppendingFormat:@"%c",str[0]]);
        allPermutation(str + 1,buffer);
    }
}

int main(int argc, const char * argv[]) {
    char *str = "ABC";
    NSString* buffer = @"";
    allPermutation(str,buffer);
    return 0;
}
           

字元串“123”對每一個元素'取'or'舍',建構二叉樹的過程:

對字元串 “ABC” 所有子集的列舉

繼續閱讀