演算法思考 字串的全排列演算法

2021-09-24 21:55:53 字數 1620 閱讀 5423

牛客網 劍指offer題:字串的排列

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

輸入描述:

輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。

這裡以abc的全排列為例子,由圖可以看出可以用dfs的思路解決,對可可選擇的字母進行遍歷,不斷遞迴直到可選字母集合為空,此時就是乙個排列順序。

private

void

permutation

(arraylist

reslist, stringbuilder sb, string str)

else

else

if(i == str.

length()

-1)else

permutation

(reslist, sb, str.

substring(0

, i)

+ str.

substring

(i+1))

;//清除狀態

對於全排列還有另外一種,就是所要全排列的資料中有重複項,這樣我們就需要在全排列前做乙個判斷,對於重複項,我們只對它們中的乙個進行交換,即交換前先判斷一下該資料後面是否有重複,如果有重複就跳過,只對最後面的那個進行全排,這樣就可以避免重複了。

private

void

permutation

(arraylist

reslist, stringbuilder sb, string str)

else

else

if(i == str.

length()

-1)else

permutation

(reslist, sb, str.

substring(0

, i)

+ str.

substring

(i+1))

;//清除狀態

sb.deletecharat

(sb.

length()

-1);

}}}}

//判斷要不要交換

加了這個判斷之後就可以對含有重複項的資料進行全排列啦

todo…

演算法 字串全排列演算法

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

字串全排列演算法

輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba 這是典型的遞迴求解問題,遞迴演算法有四個特性 對於字串的排列問題 如果能生成n 1個元素的全排列,就能生成n個元素的全排列。對於只有乙個元素的集...

演算法 字串的全排列

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