<分区>
我的作业很难:
该列表包含按字母顺序排列的所有字符串,这些字符串可以形成字母 A-K。列表的开头如下所示:
- ABCDEFGHIJK,
- ABCDEFGHIKJ,
- ABCDEFGHJIK,
- ABCDEFGHJKI, ...
列表中的第三个字符串是 ABCDEFGHJIK。列表 n 的字符串是什么?
我已经编写了解决问题的代码,但只是 N 值在 600 000 - 700 000 之间。当我尝试用 700 000 解决任务时,我得到“ fatal error :允许的内存大小为 134217728 字节耗尽”。而这就是任务的窍门,自动测试编号11是160万。所以一定有更简单的算法,但是我用搜索引擎找不到。那么什么是算法呢?我的代码是:
<?php
$number = $_REQUEST['n'];
$lettering = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K");
$counter = $number;
$done = permute($lettering, $counter);
echo $done[$number-1]."<br>";
function permute($array, $counter) {
global $number;
if(1 === count($array))
return $array;
$result = array();
foreach($array as $key => $item)
foreach(permute(array_diff_key($array, array($key => $item)), $counter) as $p){
$result[] = $item.$p;
$counter--;
if($counter == 0) return $result;
}
return $result;
}