数论之全排列问题

一、列出全排列

1. 从1到n的全排列

2. 字符的全排列

2.1 题目描述

给定一个字符串,列出所有的字符的全排列
链接

2.2 题目思路

可以对字符串做映射,但是其实每个字符都在字符串对应了一个位置(字符串的下标),因此,求下标的全排列,即可以求出字符的全排列。

2.3 代码实现

#include<stdio.h>
#include<string.h>
char s[7];
int path[7];
int st[7];
int n;
void dfs(u){
    if(u == n){
        for(int i = 0; i < n; i++){
            printf("%c",s[path[i]]);
        }
        printf("\n");
        return;
    }
    for(int i = 0; i < n; i++){
        if(!st[i]){
            path[u] = i;
            st[i] = 1;
            dfs(u+1);
            st[i] = 0;
        }
    }
}
int main(){
    scanf("%s",s);
    n = strlen(s);
    memset(st, 0, sizeof(st));
    dfs(0);
    return 0;
}
posted @ 2022-07-19 21:31  要兵长还是里维  阅读(25)  评论(0编辑  收藏  举报