我必须创建一个采用两个整数的方法,让它们成为n和m,并返回有多少种方法来求和m正数n.例如,像这样的方法调用partition(6, 2)应返回3,因为有3种方法可能.他们是5 + 1,4 + 2和3 + 3.顺便说一句,4 + 2是相同的2 + 4,因此该方法不应将它们视为两个不同的变体.有人知道这个问题的解决方案吗?
更新:n和m不大于150.
我想将红黑BST转换成阵列,但出了点问题,我无法弄清楚是什么.以下是我用来执行此操作的代码片段:
public T[] toArray() {
T[] array = (T[]) Array.newInstance(clazz, count);
inOrder(root, array, 0);
return array;
}
private void inOrder(Node<T> node, T[] array, int i) {
if (node != null) {
inOrder(node.leftChild(), array, i);
array[i++] = node.data();
inOrder(node.rightChild(), array, i);
}
}
Run Code Online (Sandbox Code Playgroud)
在按照升序从10到200插入数字后,输出看起来像这样(我使用preorder遍历来查看树是否保持平衡):
[80, 40, 20, 10, 30, 60, 50, 70, 120, 100, 90, 110, 140, 130, 160, 150, 170, 180]
Run Code Online (Sandbox Code Playgroud)
但是当我调用toArray()方法时,我得到了这个:
80 120 140 160 170 180 null null null null null null null null null null …Run Code Online (Sandbox Code Playgroud)