php - PHP 中的整数分区

标签 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, $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, []);

输出:

1 1 1 1 1 
1 1 1 2 
1 1 3 
1 2 2 
1 4 
2 3 
5 

请注意,这种暴力递归解决方案不适用于更大的 T。存在一些动态规划解决方案可以解决更大范围内数字的问题。

关于php - PHP 中的整数分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42290726/

相关文章:

c# - 模拟离散房间中的减压

php - Laravel getDirty 和 getOriginal 在更新时给出相同的值

php - 分页功能不适用于 1 以外的页面

java - 将 array_walk 从 php 转换为 java 方法

c++ - 分析算法

c - 快速计算数组中较小/相等/较大元素的方法

c++ - N乘N矩阵对角差

PHP try-catch block : are they able to catch invalid arg types?

javascript - 写入时更改输入字段值

简单平方的算法