当前位置:Gxlcms > PHP教程 > php全排列的递归算法的代码

php全排列的递归算法的代码

时间:2021-07-01 10:21:17 帮助过:22人阅读

  1. function rank($base, $temp=null)
  2. {
  3. $len = strlen($base);
  4. if($len <= 1)
  5. {
  6. echo $temp.$base.'
    ';
  7. }
  8. else
  9. {
  10. for($i=0; $i< $len; ++$i)
  11. {
  12. rank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i]);
  13. }
  14. }
  15. }
  16. rank('123');
  17. ?>

不过,经多次测试运行结果,发现存在一个问题:若是存在相同的元素,则全排列有重复。 例如'122'的全排列只有三种情况:'122'、'212'、'221';上面方法却有重复。 略作修改,加个判断重复的标志,问题解决。

  1. function fsRank($base, $temp=null)
  2. {
  3. static $ret = array();
  4. $len = strlen($base);
  5. if($len <= 1)
  6. {
  7. //echo $temp.$base.'
    ';
  8. $ret[] = $temp.$base;
  9. }
  10. else
  11. {
  12. for($i=0; $i< $len; ++$i)
  13. {
  14. $had_flag = false;
  15. for($j=0; $j<$i; ++$j)
  16. {
  17. if($base[$i] == $base[$j])
  18. {
  19. $had_flag = true;
  20. break;
  21. }
  22. }
  23. if($had_flag)
  24. {
  25. continue;
  26. }
  27. fsRank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i]);
  28. }
  29. }
  30. return $ret;
  31. }
  32. print '
    ';
  33. print_r(fsRank('122'));
  34. print '
  35. ';
  36. ?>
介绍了全排列的递归算法,这里为大家推荐一篇php数组全排列的非递归算法实现代码,大家可以参考下。

人气教程排行