輸入一個字符串,按字典序打印出該字符串中字符的所有排列。
例如,輸入字符串abc,則打印出由字符a,b,c所能排列出來的所有字符串abc,acb,bac,bca,cab和cba。
思路:
1.利用遞歸形成遞歸樹,達到深度優先,固定首字母的效果
2.得復位以后才能再次深度優先
3.回溯法思想
4.一張圖和一個運行過程,只能慢慢體會了
?phpfunction test($str,$start, $res){ //遞歸終止條件 if($start==strlen($str)){ $res[]=$str; return; for($i=$start;$i strlen($str);++$i){ if($i==$start || $str{$i}!=$str{$start}){ swap($str,$i,$start);var_dump($str. === .$start);var_dump($res);sleep(1); test($str,$start+1,$res); swap($str,$i,$start); return $res;}function swap( $str,$a,$b){ if(!is_string($str)) return; $t=$str{$a}; $str{$a}=$str{$b}; $str{$b}=$t;}$str= abc $res=array();//調用入口,從索引0開始$res=test($str,0,$res);var_dump($res);
string(7) abc===0 array(0) {}string(7) abc===1 array(0) {}string(7) abc===2 array(0) {}string(7) acb===1 array(1) { [0]= string(3) abc }string(7) acb===2 array(1) { [0]= string(3) abc }string(7) bac===0 array(2) { [0]= string(3) abc [1]= string(3) acb }string(7) bac===1 array(2) { [0]= string(3) abc [1]= string(3) acb }string(7) bac===2 array(2) { [0]= string(3) abc [1]= string(3) acb }string(7) bca===1 array(3) { [0]= string(3) abc [1]= string(3) acb [2]= string(3) bac }string(7) bca===2 array(3) { [0]= string(3) abc [1]= string(3) acb [2]= string(3) bac }string(7) cba===0 array(4) { [0]= string(3) abc [1]= string(3) acb [2]= string(3) bac [3]= string(3) bca }string(7) cba===1 array(4) { [0]= string(3) abc [1]= string(3) acb [2]= string(3) bac [3]= string(3) bca }string(7) cba===2 array(4) { [0]= string(3) abc [1]= string(3) acb [2]= string(3) bac [3]= string(3) bca }string(7) cab===1 array(5) { [0]= string(3) abc [1]= string(3) acb [2]= string(3) bac [3]= string(3) bca [4]= string(3) cba }string(7) cab===2 array(5) { [0]= string(3) abc [1]= string(3) acb [2]= string(3) bac [3]= string(3) bca [4]= string(3) cba }array(6) { [0]= string(3) abc [1]= string(3) acb [2]= string(3) bac [3]= string(3) bca [4]= string(3) cba [5]= string(3) cab }
相關教程:PHP視頻教程
以上就是[PHP學習] 如何實現字符串的全排列的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答