輸入乙個字串,列印出該字串中字元的所有排列。
輸入:abc
輸出:abc、acb、bac、bca、cab、cba。
step1:求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有字元進行交換。
step2:每次都把乙個數固定在前面,讓後面的數遞迴地進行全排列,這樣每個數都固定過以後就能找出所有排列。
注:我們把每個數固定在前面並讓後面的進行全排列完畢以後,要恢復原來的狀態,也就需要交換回來。
public class permutation
permutation(s.tochararray(),0);
}private static void permutation(char array, int pos)
for (int i=pos;i輸入:abc
輸出:a b c ac ba bac
如果輸入n個字元,則這n個字元能構成長度為1的組合,長度為2的組合,……,長度為n的組合。
在求n個字元的長度為m(1<=m<=n)的組合的時候,我們把這n個字元分成兩部分:第乙個字元和其餘的所有字元。如果組合裡包含第乙個字元,則下一步在剩餘的字元裡面選取m-1個字元;如果組合裡不包含第乙個字元,則下一步在剩餘的n-1個字元裡選取m個字元。也就是說,我們可以把求n個字元組成長度為m的組合的問題,分解成兩個子問題,分別求n-1個字串中長度為m-1的組合,以及求n-1個字元的長度為m的組合。這兩個子問題都可以用遞迴實現。
劍指Offer 38 字串的排列
輸入乙個字串,列印出該字串中字元的所有排列。例 輸入 abc 輸出 abc acb bac cab cba 長度為n的字串的排列若是集合s,其中一種排列的字串為 s2,sn s2 sn 再插入sn 1s sn 1 則有對於乙個字串有n 1個插入位置。因此,解題思路就是每次遞迴加入乙個字元,直到字串全...
劍指 Offer 38 字串的排列
輸入乙個字串,列印出該字串中字元的所有排列。你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。示例 輸入 s abc 輸出 abc acb bac bca cab cba class solution boolean visited new boolean s.length dfs s,vis...
劍指 Offer 38 字串的排列
輸入乙個字串,列印出該字串中字元的所有排列。你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。示例 輸入 s abc 輸出 abc acb bac bca cab cba 限制 1 s 的長度 8 通過次數30,289提交次數55,865 思路 回溯法。這道題應該這樣來理解,對於每乙個位置,在...