劍指Offer 題38(字串的排列)

2021-09-27 03:01:02 字數 746 閱讀 7338

輸入乙個字串,列印出該字串中字元的所有排列。

輸入: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 思路 回溯法。這道題應該這樣來理解,對於每乙個位置,在...