日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2#两数相加

發(fā)布時間:2023/12/18 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2#两数相加 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目描述

2#兩數(shù)相加

給定兩個非空鏈表來表示兩個非負(fù)整數(shù)。位數(shù)按照逆序方式存儲,它們的每個節(jié)點(diǎn)只存儲單個數(shù)字。將兩數(shù)相加返回一個新的鏈表。

你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)字都不會以零開頭。

示例:

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 原因:342 + 465 = 807

分析

由于是兩個鏈表的元素對應(yīng)相加,很自然地就想到用雙指針,然后在雙指針的基礎(chǔ)上加一些進(jìn)位的操作滿足特殊情況。

1. 結(jié)果位數(shù)與有原鏈表相等

這是一種比較簡單的情況,原題中的測試用例就是這種。雖然在中間的某一位會有進(jìn)位,但是最高位之和比較小,不會產(chǎn)生進(jìn)位,最后的和的結(jié)果的位數(shù)也和兩個加數(shù)中較長的那個一致。

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807.

這種情況的處理就比較簡單。新建一個鏈表,設(shè)置一個int型的變量carry來保存進(jìn)位的信息,使用兩個指針分別遍歷兩個鏈表,取出每一位的值(細(xì)節(jié):如果指針變?yōu)閚ull了,取出的值為0),依次在鏈表的尾部添加每一位的結(jié)果。

2. 結(jié)果位數(shù)與原鏈表不等

這種情況,最高位比較大,最后的結(jié)果會比兩個加數(shù)中較大的那個還多一位。

Input: (9 -> 9) + (1) Output: 0 -> 0 -> 1 Explanation: 99 + 1 = 100.

在這種情況下,最后要多一步操作,判斷carry位是否為0,如果不為0,就要在結(jié)果鏈表的尾部再加一位。

源碼

/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/ class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {int carry = 0;ListNode result = new ListNode(0);ListNode current = result;while (l1 != null || l2 != null){int x = (l1 != null)? l1.val : 0; // 取出對應(yīng)位的值int y = (l2 != null)? l2.val : 0;int sum = x + y + carry;current.next = new ListNode(sum % 10);carry = sum / 10; // 計算進(jìn)位if (l1 != null) l1 = l1.next;if (l2 != null) l2 = l2.next;current = current.next;}if (carry > 0) // 判斷是否需要多加一位current.next = new ListNode(carry);return result.next;} }

轉(zhuǎn)載于:https://www.cnblogs.com/yuzhenzero/p/9626415.html

總結(jié)

以上是生活随笔為你收集整理的2#两数相加的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。