PHP實現字串的排列組合(遞迴回溯)

2021-09-26 06:31:00 字數 928 閱讀 4927

題目

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串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種情況.全排列的過程 選擇第乙個字元 獲得第乙個字元固定下...