编程之法:面试和算法心得 读书笔记(四) 字符的所有排列

已知字符串的字符互不相同,输出他们的任意序列。比如 字符串是"ab"输出 “aa”,“ab”,“ba”,“bb”

第一个字符第二个字符结果
aaa
a
bab
aba
b
bbb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


//递归所有组合

void CalcAllPermutation(char * str, char * buff, int index, int len){
    int strLen = strlen(str);
    
    if(index >= strLen){
        return;
    }
    //如果当前buff内字符串长度已经和原字符串相同就输出
    if(len == strLen){
        printf("%s\n",buff);
        return;
    }else{
        for(int i = 0;i <= strLen;i++){
            buff[len] = str[i];
            CalcAllPermutation(str,buff,i,len+1);
        }
    }
}


int main(int argc, char * argv[]){
    char str[] = "abc";
    char * buff = (char *)calloc(1,sizeof(char) * strlen(str)+1);
    printf("递归所有组合:\n");
    CalcAllPermutation(str,buff,0,0);

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值