10 進数を 2 進数に変換し、先頭ノードが最上位ビットで最後のノードが最下位ビットであるリンク リストにビットを格納する必要があるという問題があります。10 進数が 0 になるまで、モジュロ 2 を再帰的に取り続け、結果をリストに追加するだけでよいため、問題自体を解決するのは実際には簡単です。
私が立ち往生しているのは、最上位ビットと最後の有効ビットのペア (配列またはリスト) を返すように関数を作成する必要があることです。つまり、関数に 14 を入力すると、(1, 0) が返されます。これは、14 が 2 進数で 1110 であるためです。
MSB と LSB に簡単にアクセスできます (getFirst()、getLast())。
この関数は、10 進数である引数を 1 つだけ取ることができます。
現在、私はこの現在のコードを持っています:
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>()
、関数がそれ自体を呼び出すたびに、新しいリストが作成され、元のリストではなくその新しいリストにビットが追加されますか?(関数が呼び出されたときに作成されたリストは、初めて)
誰でもこれを解決する方法を知っていますか?