比較に基づいてトピックタイトルアルゴリズムにLeetCodeブラシ、スタート問題を解決することができるが、場合に比較的大きな数を決定することによってプロセスを問題解決に、コードは、反射した後、比較的貧弱に見える、元のアルゴリズムを最適化を向上させます。
トピック:
我々は、二つの非空リストは二つの非負整数を表すために使用されて示されています。ここで、それぞれのビットは、方法の逆の順序で格納され、それらは各ノードが一つだけ桁を格納することができます。
我々はこれらの2つの数値を合計した場合、それは新しいリストを返しますし、それらを表現します。
あなたは数字0に加えて、これらの二つの数字が0で始まっていないと仮定することができます。
例:
入力:(2 - > 4 - > 3)+(5 - > 6 - > 4)出力:7 - > 0 - > 8原因:342 + 465 = 807
アイデア:
2は、必ずしもリストのサイズと同じではないので、これは同じ位置の数を計算するので、0を作るための措置をとることをサイクルタイムを助長されていませんので。
元のリスト:1 - > 5 - > 3 - > 2 = 2351
元の2つのリスト:5 - > 6 - > 9 = 965
塗りつぶし0後:
元のリスト:1 - > 5 - > 3 - > 2 - >ヌル= 2351
2つの元のリスト:5 - > 6 - > 9 - > 0 - >ヌル= 0965
このようなフィルサイズ0は、いくつかの後に変更されていないが、二つのリストに同じノードを判断しない方が良い処理サイクル時間は、空です。
そしてその後、リンクされたリスト・トラバーサルのループは、同じ2つのデジタル計算ノードは、新しいリストの同じノードに割り当てられた数値の合計を加算されます。キャリーがある場合、値は、2つのノードの追加を追加する必要がある場合、予約ビットを介して、次の時間を加えました。
上記とゼロのリストの後、我々は最後のラウンド、次のリストと次の2つのヌルのリストの最後を見ることができ、順番に、リストは、リストの次の次の二つが循環してきたことを意味しないときと述べました。
以下のコードを貼り付けます。
/ ** *片方向リンクの定義リスト *パブリッククラスListNode { * INTヴァル; * ListNode次に、 * ListNode(INT X){X =ヴァル;} *} * / クラスソリューション{ パブリックListNodeのaddTwoNumbers(L1 ListNode、 L2 ListNode){ // ノードが最初のノード、node.next実際の開始ノードである ListNodeノード= 新しい新しい ListNode(0 ); // 0ノード0と矛盾する任意の長さのノードのノードが追加請求 ListNodeを= ZERO 新しい新しい ListNode(0 ); // ポインタ ListNodeポイント= ノード; // +ノード1 + NODE2レベル値和加算することによって INTを合計= 0 ; // 进位标志 int型のレベル= 0 ; 実行{ point.next = 新しい ListNode(0 )。 点 = point.next。 和 = l1.val + l2.val + レベル。 レベル =和/ 10 。 point.val =合計10% 。 L1 = l1.next == nullの?ゼロ:l1.next。 L2 = l2.next == nullの?ゼロ:l2.next。 } しばらく(!L1 = L2); もし(レベル== 1 ){ point.next = 新しい ListNode(1 )。 } 戻りnode.next。 } }
私たちはここに焦点を当ててみましょう
(1)レベル=和/ 10:次いで、分割の10桁に入る合計が10未満であれば、我々は0を取得します。
(2)10 point.val =和%:Iに10桁の値を取得します。