请教一个列举 请教,如何列出26个字母和10个阿拉伯数字组成的三个字符组合? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 老徐(版主)写过这样一个函数/*** 组合 ***/function combination( $arr, $num=0) { $len = count($arr); if($num == 0) $num = $len; $res = array(); for($i=1,$n=pow(2, $len);$i<$n;++$i) { $tmp = str_pad(base_convert($i, 10, 2), $len, '0', STR_PAD_LEFT); $t = array(); for($j=0;$j<$len;++$j) { if($tmp{$j} == '1') { $t[] = $arr[$j]; } } if(count($t) == $num) $res[] = $t; } return $res;} $arr 由0-9,a-z填充很难比这样更快啦for($i=0;$i<36;$i++){ for($j=0;$j<36;$j++) { for($l=0;$l<36;$l++) { $arr[$i].$arr[$j].$arr[$l]; } }} 元素可重复组合用这个,不可重复循环边界微调一下即可很难更快啦for($i=0;$i<36;$i++){ for($j=$i;$j<36;$j++) { for($l=$j;$l<36;$l++) { $arr[$i].$arr[$j].$arr[$l]; } }} 本帖最后由 xuzuning 于 2012-07-05 14:51:56 编辑 前面提了,$arr 由0-9,a-z组成,直观简单的思维,效率非常高的 $arr = str_split('abcdefghigklmnopqrstuvwxyz0123456789');$len = count($arr);$list = array();for ($i = 0; $i < $len; $i++) { for ($j = 0; $j < $len; $j++) { for ($k = 0; $k < $len; $k++) { $list[] = $arr[$i] . $arr[$j] . $arr[$k]; } }}echo '<pre>';print_r($list); 高手帮忙,数据库操作无效 关于smarty的错误 PHP建论坛问题 eclipse开发php问题 PHP合并数组的问题 URL传值的问题。。急 关与内网FTP上传的问题,FLASHFXP,CUTEFTP?? 100分Refer难题 一个订单系统分析的问题 在PHP中,怎样输入Ctrl+A这样的键? 如果知道id为2了,怎么一次搜索得出 “新闻 新闻下级”呢?? 使用PHP+Sphinx建立高效的站内搜索引擎
/*** 组合 ***/
function combination( $arr, $num=0) {
$len = count($arr);
if($num == 0) $num = $len;
$res = array();
for($i=1,$n=pow(2, $len);$i<$n;++$i) {
$tmp = str_pad(base_convert($i, 10, 2), $len, '0', STR_PAD_LEFT);
$t = array();
for($j=0;$j<$len;++$j) {
if($tmp{$j} == '1') {
$t[] = $arr[$j];
}
}
if(count($t) == $num) $res[] = $t;
}
return $res;
}
很难比这样更快啦for($i=0;$i<36;$i++)
{
for($j=0;$j<36;$j++)
{
for($l=0;$l<36;$l++)
{
$arr[$i].$arr[$j].$arr[$l];
}
}
}
{
for($j=$i;$j<36;$j++)
{
for($l=$j;$l<36;$l++)
{
$arr[$i].$arr[$j].$arr[$l];
}
}
}
前面提了,$arr 由0-9,a-z组成,直观简单的思维,效率非常高的
$len = count($arr);
$list = array();
for ($i = 0; $i < $len; $i++) {
for ($j = 0; $j < $len; $j++) {
for ($k = 0; $k < $len; $k++) {
$list[] = $arr[$i] . $arr[$j] . $arr[$k];
}
}
}
echo '<pre>';print_r($list);