お勉強がてら書いてみた。
こういう数値リストを
[5, 20, 22, 35, 64, 71]
組み合わせごとの探索順のツリーにする。
言語はvar_dumpが綺麗なPHPで。
<?php // Your code here! $num_list = array( 5, 20, 22, 35, 64, 71 ); function search( $num_list, $index ){ $arrayCount = count( $num_list ); //底まで探索 if( !array_key_exists( $index+1, $num_list ) ){ return array( $num_list[$index] ); } $child = array(); //loopは現在のindexから配列の終端まで for($i=1;$i<$arrayCount-$index;$i++){ //子ノードを作成 現在のindex以降のtreeを持つ $child[] = search( $num_list, $index+$i); } //ノードを親に返す [ value, [children] ] return array( $num_list[$index], $child ); } $data = search($num_list, 0); var_dump($data); ?>
array(2) {
[0]=>
int(5)
[1]=>
array(5) {
[0]=>
array(2) {
[0]=>
int(20)
[1]=>
array(4) {
[0]=>
array(2) {
[0]=>
int(22)
[1]=>
array(3) {
[0]=>
array(2) {
[0]=>
int(35)
[1]=>
array(2) {
[0]=>
array(2) {
[0]=>
int(64)
[1]=>
array(1) {
[0]=>
array(1) {
[0]=>
int(71)
}
}
}
[1]=>
array(1) {
[0]=>
int(71)
}
}
}
[1]=>
array(2) {
[0]=>
int(64)
[1]=>
array(1) {
[0]=>
array(1) {
[0]=>
int(71)
}
}
}
[2]=>
array(1) {
[0]=>
int(71)
}
}
}
[1]=>
array(2) {
[0]=>
int(35)
[1]=>
array(2) {
[0]=>
array(2) {
[0]=>
int(64)
[1]=>
array(1) {
[0]=>
array(1) {
[0]=>
int(71)
}
}
}
[1]=>
array(1) {
[0]=>
int(71)
}
}
}
[2]=>
array(2) {
[0]=>
int(64)
[1]=>
array(1) {
[0]=>
array(1) {
[0]=>
int(71)
}
}
}
[3]=>
array(1) {
[0]=>
int(71)
}
}
}
[1]=>
array(2) {
[0]=>
int(22)
[1]=>
array(3) {
[0]=>
array(2) {
[0]=>
int(35)
[1]=>
array(2) {
[0]=>
array(2) {
[0]=>
int(64)
[1]=>
array(1) {
[0]=>
array(1) {
[0]=>
int(71)
}
}
}
[1]=>
array(1) {
[0]=>
int(71)
}
}
}
[1]=>
array(2) {
[0]=>
int(64)
[1]=>
array(1) {
[0]=>
array(1) {
[0]=>
int(71)
}
}
}
[2]=>
array(1) {
[0]=>
int(71)
}
}
}
[2]=>
array(2) {
[0]=>
int(35)
[1]=>
array(2) {
[0]=>
array(2) {
[0]=>
int(64)
[1]=>
array(1) {
[0]=>
array(1) {
[0]=>
int(71)
}
}
}
[1]=>
array(1) {
[0]=>
int(71)
}
}
}
[3]=>
array(2) {
[0]=>
int(64)
[1]=>
array(1) {
[0]=>
array(1) {
[0]=>
int(71)
}
}
}
[4]=>
array(1) {
[0]=>
int(71)
}
}
}
