欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2024-01-26 19:41:16
...
  1. function rank($base, $temp=null)
  2. {
  3. $len = strlen($base);
  4. if($len {
  5. echo $temp.$base.'
    ';
  6. }
  7. else
  8. {
  9. for($i=0; $i{
  10. rank(substr($base, 0, $i).substr($base, $i+1, $len-$i-1), $temp.$base[$i]);
  11. }
  12. }
  13. }
  14. rank('123');
  15. ?>
复制代码

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

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