【发布时间】:2012-10-16 01:00:33
【问题描述】:
我有这个问题,我必须将十进制数转换为二进制,然后将这些位存储在一个链表中,其中头节点是最高有效位,最后一个节点是最低有效位。解决问题本身其实很简单,你只需要不断递归取模 2 并将结果添加到列表中,直到十进制数变为 0。
我卡住的地方是我必须编写函数,使其返回最高有效位和最后一个有效位的一对数字(无论是数组还是列表)。 即:在函数中输入 14 将返回 (1, 0),因为 14 是二进制的 1110。
我确实可以轻松访问 MSB 和 LSB(getFirst()、getLast())。
函数只能接受一个参数,即十进制数。
目前我有这个当前代码:
public static void encodeBin(int n) {
if(n == 0) return; //Base case
else {
if(n % 2 == 0)
theList.addFirst(0);
else
theList.addFirst(1);
encodeBin(n / 2);
}
// return?
}
问题是我不知道如何返回这 2 个值。有返回值意味着我不能自己调用 encodeBin()。
此外,我应该在哪里创建列表?如果我在函数的最开头放置List<Integer> = new LinkedList<Integer>() 之类的内容,那么每次函数调用自身时,它都会创建一个新列表并在该新列表中添加位而不是原始列表中的位吗?(从函数创建时创建的列表第一次调用)
有人知道怎么解决吗?
【问题讨论】:
-
您可以使用
return theList.addFirst(encodeBin(<next_value));或theList.addList(encodeBin(<next_value>));return theList;或类似名称,具体取决于您的设计。
标签: java recursion binary linked-list return