输入1:
64
输出:(大小为3)
1 x 1 x 64 =64
1 x 2 x 32 =64
1 x 4 x 16 =64
1 x 8 x 8 =64
2 x 2 x 16 =64
2 x 4 x 8 =64
4 x 4 x 4 =64
输入2:
6
输出:(大小为2)
1 x 6 =6
2 x 3 =6
我尝试使用完全二叉树,但是没有得到所有可能的组合
这是:
64
32 2
16 2 2 1
8 2 1 2 1 2 1 1
如果按级别跟踪元素只有某些组合可用
64 x 1 X 1
32 X 2 X 1
16 x 2 x 2
8 x 2 x 2 x 2( limit > 3 )
问题是我需要所有可能的组合
答案 0 :(得分:0)
您可以使用递归方法。考虑以下PHP代码(我想您可以将其转换为所需的每种语言):
function comb($num, $cnt, $prefix, $minDiv) {
if ($cnt == 0)
{
if ($num == 1)
return rtrim($prefix,",");
else return false;
}
$arrs = array();
for ($i=$minDiv; $i <= $num; $i++) {
if ($num % $i == 0) { // if num modulo i equal 0
$ans = comb($num/$i, $cnt-1, $prefix . $i . ",", $i );
if ($ans) // if valid combination add it
$arrs[] = $ans;
}
}
return $arrs;
}
$ans = comb(64,3, "",1);
echo "ANSWER:\n";
echo print_r($ans);
此代码将为comb(6,2,“”,1)产生以下答案:
1,6
2,3