題目輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
輸入描述:輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
解題思路:回溯的思想:對於排序後的結果位數是一定的,我們先確定第一位,讓字串的第一位分別與第一位和第一位以後的,第二位,第三位…進行交換,得到不同結果,然後對於不同結果再從第二位開始分別與三位,第四位…遞迴上面步驟;直到字串最後一位的前一位位置(遞迴終止條件)
<?php
/** * 1、遞迴演算法 * 回溯演算法 */
$fd=
fopen
("example.txt"
,'r+');
//$fd = stdin;
while
(fscanf
($fd
,"%[^\n]"
,$str))
foreach
($res
as$val)}
/* * 引數:字串陣列,從哪個位置開始,結果列表 * */
function
combistr
($arr,$p
,&$res
)$temparr=[
];//記錄重複元素
for($j=
$p;$j<
count
($arr);
$j++)}
return;}
function
swap(&
$arr,$i
,$j)
字串排列組合
題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。題目分析 考慮把這個複雜的問題分解成為小的問題。整個字串的排列,可以看成兩個部分 首先,求所有可能出現在第乙個位置的字元 然...
字串排列組合
1 字串的組合 子串行 題目 輸入乙個字串,輸出該字串中字元的所有組合。例子 輸入 abc,它的組合有 a b c ab ac bc abc 分析 我們可以將字串中的每個字元看成二叉樹的乙個節點,根節點為空,每個節點都會有兩種選擇 要 和 不要 兩種選擇 那麼我們就可以利用遞迴實現。public c...
字串的排列 組合
遞迴方法 1 全排列 面試題28 字串的排列 從集合依次選出每乙個元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理 n個數的全排列,一共有n!種情況.n個位置,第乙個位置有n種,當第乙個位置固定下來之後,第二個位置有n 1種情況.全排列的過程 選擇第乙個字元 獲得第乙個字元固定下...