劍指Offer 程式設計題28(字串的排列)

2021-07-13 09:38:18 字數 883 閱讀 8736

把乙個字串看成由兩部分組成:第一部分為它的第乙個字元,第二部分是後面的所有字元。在圖4.14 中,我們用兩種不同的背景顏色區分字串的兩部分。

我們求整個字串的排列,可以看成兩步:首先求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換。圖4.14 就是分別把第乙個字元a 和後面的b、c 等字元交換的情形。首先固定第乙個字元(如圖4.14 (a )所示〉,求後面所有字元的排列。這個時候我們仍把後面的所有字元分成兩部分:後面字元的第乙個字元,以及這個字元之後的所有字元。然後把第乙個字元逐一和它後面的字元交換(如圖4.14 (b)所示)。。。。。。

這其實是很典型的遞迴思路。

**實現:

public class test28 

// 進行排列操作

permutation(chars, 0);

}/**

* 求字元陣列的排列

** @param chars 待排列的字串

* @param begin 當前處理的位置

劍指Offer28 字串排列問題

輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出字元a b c所能排列出來 的所有字串abc bac bca cab cba。求整個字串的全排列,可以看成兩步 第一步 首先求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有的字元交換 第二步 固定第乙個字元,求後面所有...

劍指offer28 字串的全排列

題目 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a b c所能排列出來的所有字串abc acb bac bca cab 和cba。解法 遞迴實現 從字串中選出乙個字元作為排列的第乙個字元,然後對剩餘的字元進行全排列。如此遞迴下去,從而得到所有字元的全排列。第一步 ...

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

輸入乙個字串,列印出該字串中字元的所有排列。輸入 abc 輸出 abc acb bac bca cab cba。step1 求所有可能出現在第乙個位置的字元,即把第乙個字元和後面所有字元進行交換。step2 每次都把乙個數固定在前面,讓後面的數遞迴地進行全排列,這樣每個數都固定過以後就能找出所有排列...