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

2025-05-29 0 76

实例如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72
<?php

/*分治法——直接选择

比如说a b c

首先将a之后的字符依次与a进行交换

1 b,a,c

2 c,b,a

注意这里少了一个原始数据 a,b,c。需要把原始数据也算如排列

3 a,b,c

然后把字符移到第二个位置,将第二个位置之后的数分别与第二个位置的数进行交换

1 b,a,c ===> 11 b,c,a

2 c,b,a ===> 21 c,a,b

3 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);

/*分治法——直接插入

初始时从0个元素开始,输出初始序列,为组合的一个序列

当在来一个元素时只需将该元素放在该元素之前的元素组的不同的位置即组成了不同的排列

如已有元素组为a,b.新元素为c,把c分别与a,b进行交换即可(a,c,b);(c,b,a),在现有的排列上在新增元素

重复执行以上步骤

*/

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 输出他们的全部组合)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合) https://www.kuaiidc.com/95226.html

相关文章

发表评论
暂无评论