最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【直播回放】ChatGPT編程刷力扣面試題 02.05. 鏈表求和(在某些科學(xué)計算、金融計算或

2023-07-28 00:33 作者:ChatGPT云炬學(xué)長  | 我要投稿

直播截圖

編輯切換為居中

編輯切換為居中

題目描述

給定兩個用鏈表表示的整數(shù),每個節(jié)點包含一個數(shù)位。 這些數(shù)位是反向存放的,也就是個位排在鏈表首部。 編寫函數(shù)對這兩個整數(shù)求和,并用鏈表形式返回結(jié)果。 示例: 輸入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295 輸出:2 -> 1 -> 9,即912

開始解題(python)

編輯切換為居中

def addTwoNumbers(l1, l2): ? ?dummy = ListNode(0) ?# 創(chuàng)建一個虛擬節(jié)點作為新鏈表的頭部 ? ?curr = dummy ?# 用 curr 指針指向當(dāng)前節(jié)點 ? ?carry = 0 ?# 進(jìn)位值 ? ?while l1 or l2: ? ? ? ?# 獲取 l1 和 l2 當(dāng)前位置的數(shù)位,如果已經(jīng)達(dá)到鏈表末尾,則為 0 ? ? ? ?x = l1.val if l1 else 0 ? ? ? ?y = l2.val if l2 else 0 ? ? ? ?# 計算當(dāng)前位置的和,并考慮進(jìn)位 ? ? ? ?# 然后取得個位數(shù)存入新鏈表中 ? ? ? ?sum = x + y + carry ? ? ? ?carry = sum // 10 ? ? ? ?curr.next = ListNode(sum % 10) ? ? ? ?curr = curr.next ? ? ? ?# 移動到下一個節(jié)點 ? ? ? ?if l1: ? ? ? ? ? ?l1 = l1.next ? ? ? ?if l2: ? ? ? ? ? ?l2 = l2.next ? ?# 如果最后還有進(jìn)位,則在新鏈表的最后添加一個節(jié)點 ? ?if carry > 0: ? ? ? ?curr.next = ListNode(carry) ? ?return dummy.next ?# 返回新鏈表的頭部


編輯切換為居中

逐步驗算

編輯切換為居中

編輯切換為居中

首先,我們有兩個輸入鏈表:

l1: 7 -> 1 -> 6

l2: 5 -> 9 -> 2

我們將使用addTwoNumbers函數(shù)來將這兩個鏈表相加,并返回結(jié)果鏈表的頭部。


創(chuàng)建一個虛擬節(jié)點作為新鏈表的頭部:dummy = ListNode(0),這個節(jié)點的值暫時沒有意義。

創(chuàng)建一個指針 curr,指向當(dāng)前節(jié)點,初始指向虛擬節(jié)點:curr = dummy。

創(chuàng)建一個變量 carry 來表示進(jìn)位值,初始值為 0。

進(jìn)入循環(huán),直到 l1 和 l2 都遍歷完了。


獲取 l1 和 l2 當(dāng)前位置的數(shù)位,如果已經(jīng)達(dá)到鏈表末尾,則為 0。

對于第一次循環(huán),x = 7 ?(l1.val),y = 5 ?(l2.val)。

計算當(dāng)前位置的和,并考慮進(jìn)位。

sum = x + y + carry = 7 + 5 + 0 = 12,carry = sum // 10 = 12 // 10 = 1。

這里的 sum 為兩個數(shù)位的和再加上上一次計算的進(jìn)位。

創(chuàng)建一個新節(jié)點,其值為和的個位數(shù)。

curr.next = ListNode(sum % 10) = ListNode(12 % 10) = ListNode(2)。

這個節(jié)點將會成為新鏈表的下一個節(jié)點,其值為和的個位數(shù)。

將 curr 指針移動到下一個節(jié)點。

curr = curr.next,這樣 curr 指向了新創(chuàng)建的節(jié)點。

移動到下一個節(jié)點。

注意,如果 l1 或 l2 已經(jīng)遍歷完了,則將對應(yīng)的指針設(shè)置為 None。


對于第一次循環(huán),l1 和 l2 仍然有下一個節(jié)點,所以 l1 和 l2 指針分別向后移動一位。

當(dāng)循環(huán)結(jié)束后,檢查是否還有進(jìn)位。


如果 carry 大于 0,則在新鏈表的最后添加一個節(jié)點。

carry = 1,所以 curr.next = ListNode(carry) = ListNode(1)。

這個節(jié)點的值為進(jìn)位值,將會成為新鏈表的最后一個節(jié)點。


返回新鏈表的頭部:dummy.next。dummy 是一個虛擬節(jié)點,dummy.next 才是真正的鏈表頭部。


所以最后結(jié)果為 2 -> 1 -> 9,即912。

實際應(yīng)用

編輯切換為居中

這個函數(shù)可以用于解決兩個鏈表表示的整數(shù)相加的問題。實際應(yīng)用場景包括但不限于以下情況:


高精度整數(shù)相加:當(dāng)兩個整數(shù)的位數(shù)很大時,常規(guī)的整數(shù)相加操作可能會造成溢出。使用鏈表表示整數(shù)可以避免溢出問題,并且能夠處理任意長的整數(shù)相加。

大數(shù)計算:在某些科學(xué)計算、金融計算或密碼學(xué)等領(lǐng)域中,可能需要進(jìn)行大數(shù)計算,即超過計算機(jī)數(shù)據(jù)類型范圍的數(shù)值計算。鏈表的靈活性使得可以輕松處理大數(shù)計算問題。

數(shù)據(jù)結(jié)構(gòu)的相加:當(dāng)涉及到兩個鏈表或其他數(shù)據(jù)結(jié)構(gòu)的相加時,可以使用類似的思路。通過遍歷兩個數(shù)據(jù)結(jié)構(gòu),并將對應(yīng)位置的元素相加,可以得到新的數(shù)據(jù)結(jié)構(gòu)。


總之,這個函數(shù)提供了一種通用的方法,用于解決鏈表或其他數(shù)據(jù)結(jié)構(gòu)中表示的數(shù)字相加的問題,可以應(yīng)用于多種實際場景中。

python和python3的異同

編輯切換為居中


【直播回放】ChatGPT編程刷力扣面試題 02.05. 鏈表求和(在某些科學(xué)計算、金融計算或的評論 (共 條)

分享到微博請遵守國家法律
环江| 随州市| 花莲县| 隆化县| 汉沽区| 内丘县| 临武县| 青河县| 晴隆县| 石阡县| 双峰县| 黎川县| 香河县| 定日县| 常德市| 称多县| 资源县| 竹溪县| 天峨县| 门源| 长宁县| 安达市| 如皋市| 锦屏县| 海阳市| 昭苏县| 灵宝市| 汾阳市| 黑龙江省| 镇江市| 铜梁县| 库尔勒市| 洪泽县| 光山县| 商都县| 壶关县| 泽库县| 乐至县| 丰县| 富锦市| 邹城市|