Rumah >pembangunan bahagian belakang >tutorial php >php全排列的递归算法的代码

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

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


Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn