php實(shí)現(xiàn)的生成排列算法示例
本文實(shí)例講述了php實(shí)現(xiàn)的生成排列算法。分享給大家供大家參考,具體如下:
<?php
function perm($s, $n, $index)
{
if($n == 0)
{
return '';
}
else
{
$nIndex = count($index); //可用的字符串下標(biāo)
$res = array();
foreach($index as $i => $v)
{
$tmp = $index;
unset($tmp[$i]); //去掉當(dāng)前的前綴
/* 調(diào)試信息,便于理解
echo "len $n , cur $i , index:\n";
var_dump($tmp);
*/
$ret = perm($s, $n-1, $tmp); //遞歸得到稍短的排列
if($ret != '')
{
foreach($ret as $r)
{
$res[] = $s[$v] . $r; //將稍短的排列逐個(gè)拼上當(dāng)前的前綴
}
}
else
{
$res[] = $s[$v];
}
}
return $res;
}
}
function getPerm($s)
{
$n = strlen($s);
$index = range(0, $n-1);
//得到不同長(zhǎng)度的排列
for($i=1; $i<=$n; $i++)
{
var_dump(perm($s, $i, $index));
}
}
getPerm('abcd');
?>
運(yùn)行結(jié)果:
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
[3]=>
string(1) "d"
}
array(12) {
[0]=>
string(2) "ab"
[1]=>
string(2) "ac"
[2]=>
string(2) "ad"
[3]=>
string(2) "ba"
[4]=>
string(2) "bc"
[5]=>
string(2) "bd"
[6]=>
string(2) "ca"
[7]=>
string(2) "cb"
[8]=>
string(2) "cd"
[9]=>
string(2) "da"
[10]=>
string(2) "db"
[11]=>
string(2) "dc"
}
array(24) {
[0]=>
string(3) "abc"
[1]=>
string(3) "abd"
[2]=>
string(3) "acb"
[3]=>
string(3) "acd"
[4]=>
string(3) "adb"
[5]=>
string(3) "adc"
[6]=>
string(3) "bac"
[7]=>
string(3) "bad"
[8]=>
string(3) "bca"
[9]=>
string(3) "bcd"
[10]=>
string(3) "bda"
[11]=>
string(3) "bdc"
[12]=>
string(3) "cab"
[13]=>
string(3) "cad"
[14]=>
string(3) "cba"
[15]=>
string(3) "cbd"
[16]=>
string(3) "cda"
[17]=>
string(3) "cdb"
[18]=>
string(3) "dab"
[19]=>
string(3) "dac"
[20]=>
string(3) "dba"
[21]=>
string(3) "dbc"
[22]=>
string(3) "dca"
[23]=>
string(3) "dcb"
}
array(24) {
[0]=>
string(4) "abcd"
[1]=>
string(4) "abdc"
[2]=>
string(4) "acbd"
[3]=>
string(4) "acdb"
[4]=>
string(4) "adbc"
[5]=>
string(4) "adcb"
[6]=>
string(4) "bacd"
[7]=>
string(4) "badc"
[8]=>
string(4) "bcad"
[9]=>
string(4) "bcda"
[10]=>
string(4) "bdac"
[11]=>
string(4) "bdca"
[12]=>
string(4) "cabd"
[13]=>
string(4) "cadb"
[14]=>
string(4) "cbad"
[15]=>
string(4) "cbda"
[16]=>
string(4) "cdab"
[17]=>
string(4) "cdba"
[18]=>
string(4) "dabc"
[19]=>
string(4) "dacb"
[20]=>
string(4) "dbac"
[21]=>
string(4) "dbca"
[22]=>
string(4) "dcab"
[23]=>
string(4) "dcba"
}
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP常用遍歷算法與技巧總結(jié)》及《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php實(shí)現(xiàn)用手機(jī)關(guān)閉計(jì)算機(jī)(電腦)的方法
這篇文章主要介紹了php實(shí)現(xiàn)用手機(jī)關(guān)閉計(jì)算機(jī)(電腦)的方法,涉及php使用system方法調(diào)用系統(tǒng)命令的相關(guān)技巧,需要的朋友可以參考下2015-04-04
PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之對(duì)象的遍歷操作示例
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之對(duì)象的遍歷操作,結(jié)合具體實(shí)例形式分析了php面向?qū)ο蟪绦蛟O(shè)計(jì)中對(duì)象屬性遍歷的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-06-06
PHP ajax 異步執(zhí)行不等待執(zhí)行結(jié)果的處理方法
這篇文章主要介紹了PHP ajax 異步執(zhí)行不等待執(zhí)行結(jié)果的處理方法,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-05-05
PHP和JavaScrip分別獲取關(guān)聯(lián)數(shù)組的鍵值示例代碼
關(guān)聯(lián)數(shù)組的鍵值獲取,有很多方法,在本文為大家介紹下PHP和JavaScrip中時(shí)如何實(shí)現(xiàn)的,感興趣的朋友可以參考下2013-09-09
php字符串函數(shù)學(xué)習(xí)之substr()
這篇文章主要介紹了php字符串函數(shù)學(xué)習(xí)之substr(),本文講解了它的定義和用法、參數(shù)描述、提示和注釋以及多個(gè)使用示例 ,需要的朋友可以參考下2015-03-03

