題目:輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串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...