2. Add Two Numbers - Medium

前往題目

想法

  • 每個digit都用數學式運算成一個數字,有個儲存的總數

思路

看了Neetcode大大的影片才意識到要回傳的是Linked list😂又是題目沒看清楚,而且也沒意識到數字由後往前,其實題目給很多方便了

  1. 兩個list,一對一對的看,也就是一位數一位數的看
  2. 每個位數都算出值和進位的數字,值加到list裡,carry繼續給下一輪

建議看code,比較清楚

Code

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode();
        ListNode cur = dummy;

        int carry = 0;

        // When there are numbers and carry left
        while ((l1 != null) || (l2 != null) || carry != 0) {
            // Extract number but careful with null
            int num1 = (l1 == null) ? 0 : l1.val;
            int num2 = (l2 == null) ? 0 : l2.val;

            // New number
            int val = num1 + num2 + carry;
            // Get the digit and carry for the next round
            carry = val / 10;
            val = val % 10;
            cur.next = new ListNode(val);

            // Move pointers
            cur = cur.next;
            l1 = (l1 != null) ? l1.next : null;
            l2 = (l2 != null) ? l2.next : null;
        }
        return dummy.next;
    }
}

2024/05/03

  • null真危險:DD

2. Add Two Numbers - Medium
https://f88083.github.io/2023/12/29/2-Add-Two-Numbers-Medium/
作者
Simon Lai
發布於
2023年12月29日
許可協議