设有a, b, c, d 4个字符,对其做全排列,可以有24种不同情形,如abcd,abdc,acbd… 等等。使用递归算法打印出所有24种排列

解决方案 »

  1.   

    $str    = 'abcd';
    $res    = Arrangement( $str );
    print_r($res);
    function Arrangement($arr = array(), $res = '') {
      if(! is_array($arr) ) $arr = str_split($arr);
      if(empty($arr)) $array[] = $res;
      else foreach($arr AS $k => $v) {
        unset($arr[$k]);
        foreach( Arrangement($arr, $res . $v) AS $t) $array[] = $t;
        $arr[$k]    = $v;
      }
      return  $array;
    }Array
    (
        [0] => abcd
        [1] => abdc
        [2] => acdb
        [3] => acbd
        [4] => adbc
        [5] => adcb
        [6] => bcda
        [7] => bcad
        [8] => bdac
        [9] => bdca
        [10] => bacd
        [11] => badc
        [12] => cdab
        [13] => cdba
        [14] => cabd
        [15] => cadb
        [16] => cbda
        [17] => cbad
        [18] => dabc
        [19] => dacb
        [20] => dbca
        [21] => dbac
        [22] => dcab
        [23] => dcba
    )