Heim > Backend-Entwicklung > PHP-Tutorial > php全排列的递归算法的代码

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

WBOY
Freigeben: 2016-07-25 09:03:27
Original
945 Leute haben es durchsucht
  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 '
    ';
    Nach dem Login kopieren
  30. print_r(fsRank('122'));
  31. print '';
  32. ?>
复制代码
介绍了全排列的递归算法,这里为大家推荐一篇php数组全排列的非递归算法实现代码,大家可以参考下。


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage