我遇到这个问题,我必须将十进制数转换为二进制,然后将这些位存储在链表中,其中头节点是最高有效位,最后一个节点是最低有效位。解决问题本身其实很简单,只需不断递归地对 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?
}
问题是我不知道如何返回这两个值。有返回值意味着我不能单独调用encodeBin()。
此外,我应该在哪里创建列表?如果我放类似的东西List<Integer> = new LinkedList<Integer>()
在函数的最开始,然后每次函数调用自身时,它都会创建一个新列表并添加该新列表中的位,而不是原来的对吗?(从第一次调用函数时创建的列表)
有人知道如何解决这个问题吗?
您不能返回 2 个值。您将必须返回一些包含这两个值的对象。一个数组或一些新对象,具体取决于您的作业要求以及该函数的使用位置。
对于链表的创建,您需要一个递归辅助方法。您的公共方法将用于初始化对象、启动递归并返回结果。这允许您的实际递归函数具有超过 1 个参数。
public static SOME_TYPE encodeBin(int n) {
LinkedList result = new LinkedList();
encodeBin_helper(result,n);
// return the MSB and LSB
}
public static void encodeBin_helper(LinkedList theList, int n) {
if(n == 0) return; //Base case
else {
if(n % 2 == 0)
theList.addFirst(0);
else
theList.addFirst(1);
encodeBin_helper(theList, n/2);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)