本文实例讲述了php实现的生成排列算法。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
<?php
function perm( $s , $n , $index )
{
if ( $n == 0)
{
return '' ;
}
else
{
$nIndex = count ( $index ); //可用的字符串下标
$res = array ();
foreach ( $index as $i => $v )
{
$tmp = $index ;
unset( $tmp [ $i ]); //去掉当前的前缀
/* 调试信息,便于理解
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 ; //将稍短的排列逐个拼上当前的前缀
}
}
else
{
$res [] = $s [ $v ];
}
}
return $res ;
}
}
function getPerm( $s )
{
$n = strlen ( $s );
$index = range(0, $n -1);
//得到不同长度的排列
for ( $i =1; $i <= $n ; $i ++)
{
var_dump(perm( $s , $i , $index ));
}
}
getPerm( 'abcd' );
?>
|
运行结果:
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"
}
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/zhaozhi406/article/details/8531944