2.両数加算javaの書き方
1353 ワード
問題の説明:
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
問題解決の考え方:どちらかのチェーンテーブルで空かを判断することを循環条件とし、2つのチェーンテーブルが必ずしも等しいとは限らないので、どちらかがnullであるかを判断する必要があり、nullであれば遍歴時にその後の値を0に割り当て、演算を行ってキャリー値と「求めた和値」を取得し、両方のチェーンテーブルが頭打ちになって、しかも未処理のキャリーがある場合、進位を後ろ(すなわち最後の最上位)に掛け、ループ更新を行い、最終的に新しいチェーンテーブルのヘッダノードに戻る.
実行時間2 ms
2つの非負の整数を表すために、2つの非空のチェーンテーブルが与えられる.ここで、それぞれのビット数は逆順序で格納され、各ノードには1桁の数字しか格納されません.この2つの数を加算すると、新しいチェーンテーブルが返され、合計が表示されます.
問題解決の考え方:どちらかのチェーンテーブルで空かを判断することを循環条件とし、2つのチェーンテーブルが必ずしも等しいとは限らないので、どちらかがnullであるかを判断する必要があり、nullであれば遍歴時にその後の値を0に割り当て、演算を行ってキャリー値と「求めた和値」を取得し、両方のチェーンテーブルが頭打ちになって、しかも未処理のキャリーがある場合、進位を後ろ(すなわち最後の最上位)に掛け、ループ更新を行い、最終的に新しいチェーンテーブルのヘッダノードに戻る.
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode p = l1;
// carry ,
int carry = 0;
// q.next == null
while (l2 != null) {
// , , , 0
if (p.next == null && l2.next != null) {
p.next = new ListNode(0);
}
if (p.next != null && l2.next == null) {
l2.next = new ListNode(0);
}
//
int sumAll = carry + p.val + l2.val;
p.val = sumAll % 10;
//
carry = sumAll / 10;
// , ,
if (p.next == null && l2.next == null && carry != 0) {
p.next = new ListNode(carry);
}
p = p.next;
l2 = l2.next;
}
return l1;
}
}
実行時間2 ms