【LeetCode每周算法】两数相加
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode每周算法】两数相加
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/add-two-numbers
給你兩個?非空 的鏈表,表示兩個非負的整數。它們每位數字都是按照?逆序?的方式存儲的,并且每個節點只能存儲?一位?數字。
請你將兩個數相加,并以相同形式返回一個表示和的鏈表。
你可以假設除了數字 0 之外,這兩個數都不會以 0?開頭。
示例 1:
輸入:l1 = [2,4,3], l2 = [5,6,4]
輸出:[7,0,8]
解釋:342 + 465 = 807.
示例 2:
輸入:l1 = [0], l2 = [0]
輸出:[0]
示例 3:
輸入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]
輸出:[8,9,9,9,0,0,0,1]
?
提示:
- 每個鏈表中的節點數在范圍 [1, 100] 內
- 0 <= Node.val <= 9
- 題目數據保證列表表示的數字不含前導零
解法一:
根據鏈表特點,直接按順序遍歷,計算對應位的數值,同時記錄進位即可。
public class Add {public static void main(String[] args) {Add add = new Add();ListNode l1 = new ListNode(1);l1.next = new ListNode(2);ListNode l2 = new ListNode(9);l2.next = new ListNode(8); // l2.next.next = new ListNode(4);ListNode listNode = add.addTwoNumbers2(l1, l2);System.out.println(listNode);}public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {// 定義當前遍歷到的節點--可以省略,直接使用l1和l2ListNode cur1 = l1;ListNode cur2 = l2;// 結果:待返回的nodeListNode node = null;// 處理返回鏈表中,當前節點的下一個節點ListNode next = null;// 相加后進位數值:8+3=11,則進位1int step = 0;// 這里遍歷次數執行定義為1000,因為條件中說明,數值最大不超過100位,也就是鏈表長度不可能超過100.// 這里可以優化,使用while循環,將下面的退出條件放在while條件中for (int i = 0; i < 1000; i++) {// 當前節點數值int val1 = 0;int val2 = 0;if (cur1 != null) {val1 = cur1.val;cur1 = cur1.next;}if (cur2 != null) {val2 = cur2.val;cur2 = cur2.next;}// 當前節點值加進位的數值之和int val = val1 + val2 + step;// 處理進位以及計算當前位置最終值step = val / 10;val = val - step * 10;if (node == null) {node = new ListNode(val);// 記錄next,方便給下一個節點關聯next = node;} else {next.next = new ListNode(val);next = next.next;}// 如果當前節點都為空,且沒有進位,則停止if (cur1 == null && cur2 == null && step==0) {break;}}return node;}}class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) {this.val = val;}ListNode(int val, ListNode next) {this.val = val;this.next = next;} }解法二:遞歸
遞歸退出條件:當兩個節點都是空的時候退出。
那如果有任一節點為空,另外一個節點不為空,那我們的節點相加邏輯就會出現空指針異常,在這里直接犧牲空間來滿足處理邏輯。
進位處理:默認在任何一個加數節點上即可,這里放在了l1上
總結
以上是生活随笔為你收集整理的【LeetCode每周算法】两数相加的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中打开指定的文件夹
- 下一篇: 【LeetCode每周算法】零钱兑换