27 字串的排列

2021-08-14 13:40:50 字數 923 閱讀 2772

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

思路:全排列,採用遞迴。

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

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

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

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

5、也就是在遞迴中需要進行進行乙個迴圈,用於交換字元,然後再換回來即可。

public

class solution

char chars = str.tochararray();

treesetres = new treeset(); //用於排序輸出

getresult(chars,0,str.length()-1,res);

result.addall(res) ;//新增到arraylist

return result ;

}public

void

getresult(char chars,int start,int end,treesetres)else}}

public

void

swap(char chars,int a,int b)else

}}

27 字串的排列

題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。總結 把字串分為兩部分 1 第乙個字元為一部分,...

27 字串的排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入描述 輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。回溯法 也就是利用樹去嘗試不同的可能性,不斷地去字串陣列裡...

JZ27 字串的排列

知識點 遞迴 全排列 題目鏈結 題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則按字典序列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。示例1 輸入 ab...