Maison > développement back-end > tutoriel php > php全排列的递归算法的代码

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

WBOY
Libérer: 2016-07-25 09:03:27
original
970 Les gens l'ont consulté
  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 '
    ';
    Copier après la connexion
  30. print_r(fsRank('122'));
  31. print '';
  32. ?>
复制代码
介绍了全排列的递归算法,这里为大家推荐一篇php数组全排列的非递归算法实现代码,大家可以参考下。


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal