LeetCode2之兩數相加(Add Two Numbers)
阿新 • • 發佈:2018-11-04
一、題目
二、一種解題思路
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成功截圖
四、感想
感覺自己還沒做到最好,希望大家有好方法指教下,加油,加油,再加油,堅持,堅持,再堅持。