高分求解PHP数组组合问题,给个思路就行。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高分求解PHP数组组合问题,给个思路就行。相关的知识,希望对你有一定的参考价值。

一个数组
<?php
$a0 = array('A','B','C','D');
?>
转换成一个二维数组:
<?php
$a1 = array(
0=>array('A'),
1=>array('B'),
2=>array('C'),
3=>array('D'),
4=>array('A','B'),
5=>array('A','C'),
6=>array('A','D'),
7=>array('B','C'),
8=>array('B','D'),
9=>array('C','D'),
10=>array('A','B','C'),
11=>array('A','B','D'),
12=>array('A','C','D'),
13=>array('B','C','D'),
14=>array('A','B','C','D'),
);
?>
如何实现?
求'A','B','C','D'四个元素的所有组合。
不一定要源码,其他语言也行,能说明问题就可以。

下面是我写的用递归实现组合的小程序:

<?php
function com($line, $x)
if (count($x)==1) echo "$line $x[0]\\n";
else
$y=array_pop($x);
com($line.\' \'.$y, $x);
com($line, $x);
com($line, array($y));



$a = array(\'A\',\'B\',\'C\',\'D\');
com(\'\', $a);
?>

由于程序是用\\n换行,请在命令行下执行,我执行的结果如下:
E:\\ygb>php a.php
D C B A
D C A
D C B
D B A
D A
D B
D C
C B A
C A
C B
B A
A
B
C
D

你如果要做新的数组,把里面的echo语句处理一下即可,注意新数组可以使用全局变量。
参考技术A 又一个算法,利用动态数组实现,原本想用array_map实现,好像array_map无法动态的递归新元素,算法容易理解:
1、给定数组$arr=array('A','B','C','D');

2、从左到右扫描数组中的每个元素,每碰到一个元素,则在后面循环附加一个大于该元素最后一个字符但小于E的字符,并添加到数组。

如扫描完'A'时:
$arr=array('A','B','C','D','AB','AC','AD')

扫描完'B':
$arr=array('A','B','C','D','AB','AC','AD','BC','BD')

以此类推直到D:
$arr=array('A','B','C','D','AB','AC','AD','BC','BD','CD')

之后继续扫描到我们新加的元素'AB'
$arr=array('A','B','C','D','AB','AC','AD','BC','BD','CD','ABC','ABD')

如此循环,数组不断增长,扫描不断加深,直至终点。
最后生成二维数组,用了preg_match_all拆分字符串。

<?
$arr = array('A','B','C','D');
$size=4;//新添加元素在数组内的起始偏移
for($i=0 ; ;$i++)
if($i == $size)
break;
$num = ord( substr($arr[$i], -1, 1) );
while( ($num++) < ord('D') )
$arr[$size++] = $arr[$i].chr($num);


//print_r($arr);

//转换成二维数组
$new_arr = array();
foreach($arr as $str)
preg_match_all("/\w/",$str,$match);
$new_arr[] = $match[0];

print_r($new_arr);

数据结构与算法之深入解析“奇偶链表”的求解思路与算法示例

一、题目要求

  • 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。
  • 第一个节点的索引被认为是奇数,第二个节点的索引为偶数,以此类推。
  • 请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。
  • 你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。
  • 示例 1:

输入: head = [1,2,3,4

以上是关于高分求解PHP数组组合问题,给个思路就行。的主要内容,如果未能解决你的问题,请参考以下文章

php当中,如何将数组合并成变量呢?

php下将多个数组合并成一个数组的方法与实例代码

有序数组合并

PHP学习笔记:Array--数组合拼函数

怎么用PHP代码做出数字1到10的所有组合方式?

数据结构与算法之深入解析“组合总和”的求解思路与算法示例