求一个算法,如何效率最高? 比如,有一组数字:1,2,3,4( 不一定是4个,可能是5个,8个,但这数字不重复)如果排出3个(可能是2个,上面的数字增多,可能要求是6个,7个)不同的组合:结果是:1,2,31,2,42,3,4大家列下算法啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 全排列算法递归有层数限制,所以根据所谓高效率的10移动法写了个不知道效率如何,LZ拿去测试一下。function combination($numArr,$combineLen){ $numCt = count($numArr); if($combineLen > $numCt) return; //$bin = decbin((pow(2,$combineLen) - 1) << ($numCt - $combineLen)); $bin = str_pad('',$combineLen,'1'); $bin = str_pad($bin,$numCt,'0',STR_PAD_RIGHT); $find = $bin; $rs[] = implode(' ',array_slice($numArr,0,$combineLen)); $j = 1; while(strrev($find) != $bin) { $k = explode('10',$find,2); $find = $find{0} === '0' ? strrev($k[0]).'01'.$k[1] : $k[0].'01'.$k[1]; for($i=0;$i<$numCt;$i++) $rs[$j] .= $find[$i] ? $numArr[$i] . " " : ''; $j++; } return $rs;}$a = range(1,9);print_r(combination($a,4)); 截取字符串的问题 求apache的rewrite规则文件.htaccess的写法 请教 session跨2级域 请教大家 ? : 的语法意思 请教下大家。把文章标题和文章内容分成2个表存放,有什么好处吗? PHP项目里的HTML页代码求教 解密MD5 CMD下运行PHP的问题 邮件变量问题有朋友可以帮我吗? 大侠请帮忙!! 为什么我mysql_fetch_array只收到一个元素? 大虾们来帮忙解决下全选和checkbox的问题
递归有层数限制,所以根据所谓高效率的10移动法写了个
不知道效率如何,LZ拿去测试一下。
function combination($numArr,$combineLen)
{
$numCt = count($numArr);
if($combineLen > $numCt) return;
//$bin = decbin((pow(2,$combineLen) - 1) << ($numCt - $combineLen));
$bin = str_pad('',$combineLen,'1');
$bin = str_pad($bin,$numCt,'0',STR_PAD_RIGHT);
$find = $bin;
$rs[] = implode(' ',array_slice($numArr,0,$combineLen));
$j = 1;
while(strrev($find) != $bin)
{
$k = explode('10',$find,2);
$find = $find{0} === '0' ? strrev($k[0]).'01'.$k[1] : $k[0].'01'.$k[1];
for($i=0;$i<$numCt;$i++) $rs[$j] .= $find[$i] ? $numArr[$i] . " " : '';
$j++;
}
return $rs;
}
$a = range(1,9);
print_r(combination($a,4));