PHP中的整数分区
这感觉像是一个非常简单的问题,但我无法使它变得优雅和“感觉正确”。问题是: 给出一个数字T,打印出所有可能到达T的方法。 例如:PHP中的整数分区,php,algorithm,Php,Algorithm,这感觉像是一个非常简单的问题,但我无法使它变得优雅和“感觉正确”。问题是: 给出一个数字T,打印出所有可能到达T的方法。 例如: T = 5 1 + 1 + 1 +1 + 1 2 + 1 + 1 + 1 3 + 1 + 1 2 + 2 + 1 4 + 1 3 + 2 请注意,3+2等于2+3,因此您不必同时打印这两种情况 我必须用PHP来做,希望任何人都能帮助:)。解决这个问题的一个简单方法是递归地解决它。下面是一个示例代码 <?php function recursion($left,
T = 5
1 + 1 + 1 +1 + 1
2 + 1 + 1 + 1
3 + 1 + 1
2 + 2 + 1
4 + 1
3 + 2
请注意,3+2等于2+3,因此您不必同时打印这两种情况
我必须用PHP来做,希望任何人都能帮助:)。解决这个问题的一个简单方法是递归地解决它。下面是一个示例代码
<?php
function recursion($left, $last, $ar) {
if($left == 0) {
foreach ($ar as $n) {
printf("%d ", $n);
}
print "<br>";
return;
}
for($n = $last; $n <= $left; $n++) {
$b = $ar;
array_push($b, $n);
recursion($left - $n, $n, $b);
}
}
recursion(5, 1, []);
请注意,这种强力递归解决方案对较大的t不起作用。存在一些动态规划解决方案,可以解决较大范围内的数字的此问题。解决此问题的一个简单方法是递归解决。下面是一个示例代码
<?php
function recursion($left, $last, $ar) {
if($left == 0) {
foreach ($ar as $n) {
printf("%d ", $n);
}
print "<br>";
return;
}
for($n = $last; $n <= $left; $n++) {
$b = $ar;
array_push($b, $n);
recursion($left - $n, $n, $b);
}
}
recursion(5, 1, []);
请注意,此bruteforce递归解决方案不适用于较大的t。存在一些动态规划解决方案,可以解决较大范围内的数字问题。感觉像是编程挑战。。恐怕任何人都会为您编写代码。在搜索框中键入“整数分区”将返回1324个结果。你确定这些问题和答案对你都没有帮助吗?感觉像是编程上的挑战。。恐怕任何人都会为您编写代码。在搜索框中键入“整数分区”将返回1324个结果。你确定这些问题和答案对你都没有帮助吗?