把乙個字串看成由兩部分組成:第一部分為它的第乙個字元,第二部分是後面的所有字元。在圖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 每次都把乙個數固定在前面,讓後面的數遞迴地進行全排列,這樣每個數都固定過以後就能找出所有排列...