leetcode(2)---两数相加
生活随笔
收集整理的這篇文章主要介紹了
leetcode(2)---两数相加
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
不時更新力扣題庫,使用python實現(xiàn),比較通俗易懂,其中注釋是我自己的理解:
# 輸入:l1 = [2,4,3], l2 = [5,6,4] # 輸出:[7,0,8] # 解釋:342 + 465 = 807. # Definition for singly-linked list.class ListNode(object):def __init__(self, val=0, next=None):self.val = valself.next = nextclass Solution:def addTwoNumbers(self, l1, l2):# 如果有一個listnode沒有填寫,就返回剩下一個即可if l1 == None:return l2if l2 == None:return l1dummy = ListNode(0)p = dummy # 設(shè)置初始的Listnode,主要是利用listnode的next操作carry = 0 # carry位主要保存進一操作# 若l1和l2都還不是Nonewhile l1 and l2:# 算當前位置的值,并且要加上之前的carry位p.next = ListNode((l1.val + l2.val + carry) % 10)carry = (l1.val + l2.val + carry) // 10 # 更新carry位l1 = l1.next # 更新l1,去掉當前頭部第一個元素l2 = l2.nextp = p.next# 如果鏈表長度不相等,l1長,把l1后面的數(shù)字都到尾部if l1:while l1:p.next = ListNode((l1.val + carry) % 10)carry = (l1.val + carry) // 10 # 更新carry位l1 = l1.next # 更新l1,去掉當前頭部第一個元素p = p.nextif l2:while l2:p.next = ListNode((l2.val + carry) % 10)carry = (l2.val + carry) // 10 # 更新carry位l2 = l2.next # 更新l1,去掉當前頭部第一個元素p = p.next# 如果加到最后一位還需要進位,那么就把最后一位加上去,carry最大只可能為1if carry == 1:p.next = ListNode(1)# 此時的p已經(jīng)不是最開始的p,但是dummy指向了p的地址,用dummy去訪問,next才是真正的值return dummy.nextif __name__ == '__main__':sol = Solution()l1: ListNode = ListNode(2, ListNode(2, ListNode(5)))l2: ListNode = ListNode(1, ListNode(3, ListNode(4)))res = sol.addTwoNumbers(l1, l2)print(res.val)總結(jié)
以上是生活随笔為你收集整理的leetcode(2)---两数相加的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode(1)---两数之和
- 下一篇: leetcode(3)---寻找最大字符