给出一个字符数组的全排列

简介:
#include <stdio.h>

char InputString[100];
char OutputString[100];
int MarkArray[100];
int StringLength;
int Number;

void processString( int cursor)
{
    int i=0;
    if(cursor==StringLength)
    {
        puts(OutputString);
        Number++;
        return;
    }

    while(i<StringLength)
    {
        if(MarkArray[i]==0)
        {
            MarkArray[i]=cursor+1;
            OutputString[cursor]=InputString[i];
            processString(cursor+1);
            MarkArray[i]=0;
        }

        i++;
    }

}


int main()
{
    int i=0;
    for(i=0;i<100;i++) MarkArray[i]=0;
    
    gets(InputString);
    
    StringLength=0;
    while(InputString[StringLength]!='\0'&&StringLength<100) StringLength++;
    OutputString[StringLength]='\0';
    
    processString(0);
    
    printf("Total:%d",Number);
    return 0;
}

说明:
递归算法,cursor表示游标,每次从输入的数组中读出一个字符,游标前进一,然后递归,当游标等于输入的数组的长度时,递归结束,输出结果。
本文转自冬冬博客园博客,原文链接:http://www.cnblogs.com/yuandong/archive/2006/08/16/478568.html ,如需转载请自行联系原作者
相关文章
|
C语言
【Leetcode-1.两数之和 -3.无重复字符的最长子串 -9.回文数(C语言)】
【Leetcode-1.两数之和 -3.无重复字符的最长子串 -9.回文数(C语言)】
37 0
|
6月前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
6月前
|
Java 测试技术 Python
每日一题《剑指offer》字符串篇之表示数值的字符串
每日一题《剑指offer》字符串篇之表示数值的字符串
47 0
每日一题《剑指offer》字符串篇之表示数值的字符串
字符串的全排列
字符串的全排列
79 0
|
C语言
C语言力扣简单题-无重复字符的最长子串
C语言力扣简单题-无重复字符的最长子串
131 0
剑指offer 19. 表示数值的字符串
剑指offer 19. 表示数值的字符串
39 0
|
C语言 C++ 容器
算法库-全排列,递归全排列 auti()字符转为整型 stringstream用法
算法库-全排列,递归全排列 auti()字符转为整型 stringstream用法
算法库-全排列,递归全排列 auti()字符转为整型 stringstream用法
|
算法
LeetCode算法:求出字符串的最大回文子串 及 长度【只利用字符串反转就可】
LeetCode算法:求出字符串的最大回文子串 及 长度【只利用字符串反转就可】
84 0
|
机器学习/深度学习
剑指offer 50 第一个只出现一次的字符
剑指offer 50 第一个只出现一次的字符
90 0
|
算法 前端开发 程序员
「LeetCode」剑指Offer-50第一个只出现一次的字符
「LeetCode」剑指Offer-50第一个只出现一次的字符
102 0
「LeetCode」剑指Offer-50第一个只出现一次的字符