simonn helped me to code an ordered integer partition function here.他发布了两个函数:一个函数只返回分区计数,第二个函数将分区作为列表。
我已经设法将第一个函数从Java翻译成PHP:
不幸的是,我无法翻译第二个功能。任何人都可以帮助我并为我翻译这个小功能吗?
public class Partitions2
{
private static void showPartitions(int sizeSet, int numPartitions)
{
showPartitions("", 0, sizeSet, numPartitions);
}
private static void showPartitions(String prefix, int start, int finish,
int numLeft)
{
if (numLeft == 0 && start == finish) {
System.out.println(prefix);
} else {
prefix += "|";
for (int i = start + 1; i <= finish; i++) {
prefix += i + ",";
showPartitions(prefix, i, finish, numLeft - 1);
}
}
}
public static void main(String[] args)
{
showPartitions(5, 3);
}
}
如果解决方案是单个函数而不是具有多个函数的类,那将是很好的。
非常感谢您提前!再次感谢simonn这个伟大的答案!
答案 0 :(得分:1)
你可能不需要main方法,它似乎只是一个测试装置,展示了如何调用其他方法。
将此代码直接映射到PHP的问题是您不能在PHP中重载方法名称。相反,您应该专注于翻译showPartitions函数的第二个版本。如果您需要一个2参数版本,您可以使用前缀和启动参数的默认值(您必须更改参数顺序才能执行此操作,因为在PHP中,可选参数必须是最后一个)。
这是我(未经测试)尝试翻译最重要的功能:
function showPartitions($prefix, $start, $finish, $numLeft)
{
if ($numLeft == 0 && $start == $finish) {
echo $prefix."\n";
} else {
$prefix .= "|";
for ($i = $start + 1; $i <= $finish; $i++) {
$prefix .= $i.",";
showPartitions($prefix, $i, $finish, $numLeft - 1);
}
}
}