/***
* 引用: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'舍',构建二叉树的过程: