排列:從n個元素中任取m個元素,並按照一定的順序進行排列,稱為排列;
全排列:當n==m時,稱為全排列;
比如:集合的全排列為:
我們可以將這個排列問題畫成圖形表示,即排列列舉樹,比如下圖為的排列列舉樹,此樹和我們這裡介紹的演算法完全一致;
演算法思路:
(1)n個元素的全排列=(n-1個元素的全排列)+(另乙個元素作為字首);
(2)出口:如果只有乙個元素的全排列,則說明已經排完,則輸出陣列;
(3)不斷將每個元素放作第乙個元素,然後將這個元素作為字首,並將其餘元素繼續全排列,等到出口,出口出去後還需要還原陣列;
static void main(string args)測試結果:/// /// 全排序
///
///
///
///
static void perm(char a, int begin, int end)
console.writeline("");
}else}}
/// /// 交換陣列 索引x和y位置的值
///
///
///
///
static void swap(char a, int x, int y)
字串 全排序
給定乙個字串陣列,列印這個陣列所有的排序組合。利用遞迴,把每個字串放在開頭n,然後分別得到相應的組合個數m,最後sum s m。public class stringfullarray public static void arrange string str,int start,int lengt...
字串的排序(全排序)
劍指offer 中題38 輸入乙個字串,列印出該字串中字元的所有排列。例如,輸入字串abc,則列印出由字元a b c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。遞迴過程 1.從起始位置往後迴圈,起始位置的字元和後面字元對換 2.遞迴該過程 3.起始位置的字元和後面字元對換回...
經典題目 字串全排序
題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。輸入 每個測試案例包括1行。輸入乙個字串,長度不超過9 可能有字元重複 字元只包括大小寫字母。輸出 對應每組資料,按字典序輸...