>백엔드 개발 >PHP 튜토리얼 >PHP 완전 배열 재귀 알고리즘 코드

PHP 완전 배열 재귀 알고리즘 코드

WBOY
WBOY원래의
2016-07-25 09:03:27959검색
  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 '
    ';</li>
    <li>print_r(fsRank('122'));</li>
    <li>print '
    ';
  33. ?>
复制代码
介绍了全排列的递归算法,这里为大家推荐一篇php数组全排列的非递归算法实现代码,大家可以参考下。


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.