1. 程式人生 > >LeetCode2之兩數相加(Add Two Numbers)

LeetCode2之兩數相加(Add Two Numbers)

一、題目

二、一種解題思路

1)介紹:暴力解法(感覺沒別的了吧,可能是我笨吧,原地爆炸下)

     方法思路:一路遍歷,一路加,遇到一個連結串列的next為null時,則停止遍歷該連結串列,並且讓另一個連結串列的剩餘節點和0相加。若連結串列已經遍歷完了,還存在進位數,則在建立一個next節點。

   時間複雜度:O(Max(m,n))

   空間複雜度:O(Max(m,n))或O(Max(m,n)+1)

2)核心程式碼:

/**
 * 2:兩數之和
 */
public class AddTwoNums {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode head = new ListNode(0);
        ListNode target = head;
        ListNode x = l1;
        ListNode y = l2;
        int num1;
        int num2;
        int sum = 0;
        //進位的值
        int carry = 0;
        while (x != null || y != null) {
            //規避某一個連結串列沒有next的情況
            num1 = (x != null) ? x.val : 0;
            num2 = (y != null) ? y.val : 0;
            sum = num1 + num2 + carry;
            carry = sum / 10;
            target.next = new ListNode(sum % 10);
            target = target.next;
            if (x != null) {
                x = x.next;
            }
            if (y != null) {
                y = y.next;
            }
        }
        //排除連結串列最後一位出現進位的情況
        if (carry > 0) {
            target.next = new ListNode(carry);
        }
        return head.next;
    }
}

3)輔助類:

public class ListNode {
    public int val;
    public ListNode next;

    public ListNode(int x) {
        val = x;
        next = null;
    }

    @Override
    public String toString() {
        return "ListNode{" +
                "val=" + val + "}";
    }
}

三、LeetCode成功截圖

四、感想

感覺自己還沒做到最好,希望大家有好方法指教下,加油,加油,再加油,堅持,堅持,再堅持。