利用递归打印一个字符串的全部排列(从左到右)

1.PHP实现

<?php
//打印一个字符串的全部排列
//排列的个数为 n! ,n为字符串的长度
//

function printArrange($str=[],$i=0,&$target=[])
{
    $len = count($str);
    //抵达字符串的最后一个字符时停止
    if(($i+1) == $len)
    {
        array_push($target,$str);
        return;
    }
    for($j=$i;$j<$len;$j++)
    {
        swap($str,$i,$j);
        printArrange($str,$i+1,$target);//$str[0,$i]是已经排列的字符串
        //swap($str,$i,$j);
    }
}

function swap(&$str=[],$i,$j)
{
    $temp = $str[$i];
    $str[$i] = $str[$j];
    $str[$j] = $temp;
}

//$str=['H','E','L','L','O',',','W','O','R','L','D'];
//$str=['W','O','R','L','D'];
$str=['W','O','R'];
$target=[];
printArrange($str,$i=0,$target);
print_r($target);

 

posted @ 2021-02-10 19:59  不知起什么名字  阅读(144)  评论(0编辑  收藏  举报