字串全排列演算法

2021-07-29 22:35:23 字數 999 閱讀 2288

輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba

這是典型的遞迴求解問題,遞迴演算法有四個特性:

對於字串的排列問題:

如果能生成n-1個元素的全排列,就能生成n個元素的全排列。對於只有乙個元素的集合,可以直接生成全排列。所以全排列的遞迴終止條件很明確,只有乙個元素時。我們可以分析一下全排列的過程:

首先,我們固定第乙個字元a,求後面兩個字元bc的排列

當兩個字元bc排列求好之後,我們把第乙個字元a和後面的b交換,得到bac,接著我們固定第乙個字元b,求後面兩個字元ac的排列

現在是把c放在第乙個位置的時候了,但是記住前面我們已經把原先的第乙個字元a和後面的b做了交換,為了保證這次c仍是和原先處在第乙個位置的a交換,我們在拿c和第乙個字元交換之前,先要把b和a交換回來。在交換b和a之後,再拿c和處於第一位置的a進行交換,得到cba。我們再次固定第乙個字元c,求後面兩個字元b、a的排列

既然我們已經知道怎麼求三個字元的排列,那麼固定第乙個字元之後求後面兩個字元的排列,就是典型的遞迴思路了

#includevoid full_sort(char chars, int begin, int end);

void swap(char chars, int begin, int end);

static int count = 0;

int main()

; full_sort(chars , 0 , 3);

printf("%d", count);

return 0;

} void full_sort(char chars, int begin, int end)

int i = 0;

for(i = begin; i <= end; i++) }

void swap(char chars, int begin, int end)

演算法 字串全排列演算法

最近在牛客和領扣上刷題,碰到了一些全排列的問題,總結一下。我們首先來看乙個問題?題目 字串的排列 題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。解題思路 使用遞迴的方式來...

演算法 字串的全排列

from 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a b c 所能排列出來的所有字串 abc acb bac bca cab 和 cba。解法一 遞迴實現 從集合中依次選出每乙個元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理,從而得到所有元素...

演算法 字串之全排列

字串的全排列是字串類的演算法題的乙個考察點,屬於普通問題,它有兩種實現方法,遞迴演算法和非遞迴演算法,非遞迴的方法要稍微難一點,以下會依次進行介紹。演算法思想 求n位的字串的全排列,先確定第0位,然後對後面n 1位進行全排列,在對n 1為進行全排列時,先確定第1位,然後對後面的n 2位進行全排列.由...