我需要通过所涉及的元素数 (M) 找到数字 (N) 的可能分区之一,如下所示:
Number 4
Partitions
4
3 1
2 2
2 1 1
1 3
1 1 1 1
我需要创建一个函数 P(N, M),它将为调用 P(4, 2) 返回以下结果:
3 1
2 2
1 3
我创建了以下方法,但我找不到打破每个分区之间界限的方法:
List<String> partitions;
public String[] partitionWithNElements(int n, int numberOfElements) {
partitions = new ArrayList<String>();
partition(n, n, "");
String[] arrayPartition = null;
for (int i = 0; i < partitions.size(); i++) {
arrayPartition = partitions.get(i).split("#");
if (arrayPartition.length == numberOfElements)
break;
}
return arrayPartition;
}
private void partition(int n, int max, String prefix) {
if (n == 0) {
if (prefix.startsWith("#"))
prefix = prefix.substring(1);
partitions.add(prefix);
return;
}
for (int i = Math.min(max, n); i >= 1; i--) {
partition(n - i, i, prefix + "#" + i);
}
}
代码再次更新。现在我使用字符串来返回元素并且我已经能够达到预期的结果,但是我试图找到一个不使用字符串来返回分区的解决方案,所以我不需要使用字符串拆分功能。