php每日小知識-字串全排列演算法
阿新 • • 發佈:2019-01-27
//從php中文網學習
//字串全排列演算法
/*全排列就是從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列,當m=n時所有的排列情況叫全排列。*/
$str = '123';
// 字串轉換為陣列
$arr = str_split($str);
// 呼叫perm函式
perm($arr, 0, count($arr)-1);
/**
* 定義perm函式
* @param [array] $arr // 排列的字串
* @param [int] $default // 初始值
* @param [int] $max // 最大值
*/
function perm (&$arr, $default, $max) {
// 初始值是否等於最大值
if ($default == $max) {
// 將陣列轉換為字串
echo join('', $arr), PHP_EOL;
} else {
// 迴圈呼叫函式
for ($i = $default; $i <= $max; $i++) {
// 呼叫swap函式
swap($arr[$default], $arr[$i]);
// 遞迴呼叫自己
perm ($arr, $default + 1, $max);
// 再次呼叫swap函式
swap($arr[$default], $arr[$i]);
}
}
}
function swap(&$a, &$b) {
$c = $a;
$a = $b;
$b = $c;
}
str_split函式
count函式
&引用
在PHP 中引用的意思是:不同的名字訪問同一個變數內容
//第二種實現的方法
function perm($arr, $str){ // $str 為儲存由 i 組成的一個排列情況
$cnt = count($arr);
if($cnt == 1){
echo $str . $arr[0] .PHP_EOL;
} else {
for ($i = 0; $i < count($arr); $i++) {
$tmp = $arr[0];
$arr[0] = $arr[$i];
$arr[$i] = $tmp;
perm(array_slice($arr, 1), $str . $arr[0]);
}
}
}
$a = array('1', '2', '3', '4');
perm($a, '');
array_slice函式