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

简介:
#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月前
【Leetcode 2707】字符串中的额外字符 —— 动态规划
1. 状态定义:把`s[i−1]`当做是额外字符,`d[i] = d[i−1] + 1` 2. 状态转移方程:遍历所有的`j(j∈[0,i−1])`,如果子字符串`s[j...i−1]`存在于`dictionary`中,那么`d[i] = min d[j] 3. 初始状态`d[0] = 0`,最终答案为`d[n]`
|
6月前
|
Java 测试技术 Python
每日一题《剑指offer》字符串篇之表示数值的字符串
每日一题《剑指offer》字符串篇之表示数值的字符串
44 0
每日一题《剑指offer》字符串篇之表示数值的字符串
字符串的全排列
字符串的全排列
78 0
|
C语言
C语言力扣简单题-无重复字符的最长子串
C语言力扣简单题-无重复字符的最长子串
122 0
|
存储 算法 Java
leetcode刷题记录:7.整数反转,8.字符串转整数,9.回文数
leetcode刷题记录:7.整数反转,8.字符串转整数,9.回文数
57 0
|
测试技术
每日一题——倒置字符串
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
108 0
|
C语言 C++ 容器
算法库-全排列,递归全排列 auti()字符转为整型 stringstream用法
算法库-全排列,递归全排列 auti()字符转为整型 stringstream用法
算法库-全排列,递归全排列 auti()字符转为整型 stringstream用法
|
算法 Python
Acwing 771.双指针 字符串中最长的连续出现的字符
Acwing 771.双指针 字符串中最长的连续出现的字符
88 0