首页 >后端开发 >php教程 >php全排列的递归算法的代码

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

WBOY
WBOY原创
2016-07-25 09:03:27949浏览
  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数组全排列的非递归算法实现代码,大家可以参考下。


声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn