浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)

时间:2021-05-18

实例如下:

<?php/*分治法——直接选择比如说a b c首先将a之后的字符依次与a进行交换1 b,a,c2 c,b,a注意这里少了一个原始数据 a,b,c。需要把原始数据也算如排列中3 a,b,c然后把字符移到第二个位置,将第二个位置之后的数分别与第二个位置的数进行交换1 b,a,c ===> 11 b,c,a2 c,b,a ===> 21 c,a,b3 a,b,c ===> 31 a,c,b**/function zuhe($arr,$begin){ if(!is_array($arr)) return ; $N = count($arr); if($begin == $N-1 || $begin >$N || $begin <0) return ; if($begin == 0){ print_r($arr);//输出原始数据 echo '</br>'; } //循环将初始值与第i个值交换后进行组合 for($i = $begin;$i < $N;$i++){ $t = $arr[$begin]; $arr[$begin] = $arr[$i]; $arr[$i] = $t; if($i!==$begin){//i==begin时的数已经输出过 print_r($arr); echo '</br>'; } zuhe($arr,$begin+1); $t = $arr[$begin]; $arr[$begin] = $arr[$i]; $arr[$i] = $t; }}$arr = array('a','b','c','d');//zuhe($arr,0);function zuhe2($arr,$begin){ if($begin==0) { print_r($arr); echo "</br>"; //zuhe2($arr,$begin+1); } if($begin >= count($arr)) return ; zuhe2($arr,$begin+1);//begin时的排列上一次已产生,直接新增元素 for($i = $begin-1;$i>=0;$i--){ $t = $arr[$begin]; $arr[$begin] = $arr[$i]; $arr[$i] = $t; print_r($arr); echo "</br>"; zuhe2($arr,$begin +1); $t = $arr[$begin]; $arr[$begin] = $arr[$i]; $arr[$i] = $t; }}

以上这篇浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章