牛客網 劍指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。解法一 遞迴實現 從集合中依次選出每乙個元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理,從而得到所有元素...