高分求解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数组组合问题,给个思路就行。的主要内容,如果未能解决你的问题,请参考以下文章