将Java代码翻译成PHP代码(13行)

时间:2009-08-31 18:21:14

标签: java php

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这个伟大的答案!

1 个答案:

答案 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);
        }
    }
}