<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實戰(zhàn)445:兩數(shù)相加 II

          共 2099字,需瀏覽 5分鐘

           ·

          2021-11-26 19:46

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做?兩數(shù)相加 II,我們先來看題面:
          https://leetcode-cn.com/problems/add-two-numbers-ii/

          You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.

          You may assume the two numbers do not contain any leading zero, except the number 0 itself.

          給你兩個 非空 鏈表來代表兩個非負整數(shù)。數(shù)字最高位位于鏈表開始位置。它們的每個節(jié)點只存儲一位數(shù)字。將這兩數(shù)相加會返回一個新的鏈表。
          你可以假設(shè)除了數(shù)字 0 之外,這兩個數(shù)字都不會以零開頭。

          示例


          解題

          https://blog.csdn.net/u013243296/article/details/116455362

          題目給出的鏈表所表示的數(shù)字,從左到右是高位到低位,做加法需要從低位到高位開始相加進位來計算,所以想到使用兩個棧來存儲鏈表表示的節(jié)點的值。再考慮進位的關(guān)系,將兩個鏈表從右向左開始計算節(jié)點表示的值,對10進行整除計算商和余數(shù),商就是進位的值,余數(shù)就是要新建的鏈表的節(jié)點的值,新建的鏈表是從低位開始建立,因為先計算的低位的值的節(jié)點,所以初始化一個空節(jié)點ans,ans的指向經(jīng)過計算,從低位到高位,最后指向的就是最高位,同時也是頭結(jié)點,返回即可。具體實現(xiàn)看代碼及注釋。

          # Definition for singly-linked list.
          # class ListNode:
          # def __init__(self, val=0, next=None):
          # self.val = val
          # self.next = next
          class?Solution:
          ????def?addTwoNumbers(self, l1:?ListNode, l2:?ListNode)?-> ListNode:
          ????????# 定義兩個棧用于存儲鏈表中的節(jié)點值
          ????????stack1, stack2 = [], []
          ????????# 最后的結(jié)果鏈表
          ????????ans = None
          ????????# 進位
          ????????carry = 0

          ????????while?l1:
          ????????????stack1.append(l1.val)
          ????????????l1 = l1.next
          ????????
          ????????while?l2:
          ????????????stack2.append(l2.val)
          ????????????l2 = l2.next

          ????????while?stack1 or?stack2 or?carry != 0:
          ????????????a = 0?if?not?stack1 else?stack1.pop()
          ????????????b = 0?if?not?stack2 else?stack2.pop()

          ????????????num = a + b + carry
          ????????????
          ????????????# res是余數(shù),就是要生成的新節(jié)點的值
          ????????????carry, res = divmod(num, 10)

          ????????????# cur_node是從低位到高位來建立新的節(jié)點,根據(jù)是出棧的值是低位先出棧來計算
          ????????????cur_node = ListNode(res)
          ????????????cur_node.next?= ans
          ????????????# ans左移
          ????????????ans = cur_node
          ????????
          ????????return?ans


          好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力 。

          上期推文:

          LeetCode1-440題匯總,希望對你有點幫助!

          LeetCode刷題實戰(zhàn)441:排列硬幣

          LeetCode刷題實戰(zhàn)442:數(shù)組中重復(fù)的數(shù)據(jù)

          LeetCode刷題實戰(zhàn)443:壓縮字符串

          LeetCode刷題實戰(zhàn)444:序列重建


          瀏覽 77
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本中文在线 | 97日韩| 国产综合色婷婷精品久久 | 在线成人网超逼视频 | 四虎做爱 |