每日leetcode4.9(旋转数组进阶/两数相加链表)

每日leetcode4.9(旋转数组进阶/两数相加链表)

154. 寻找旋转排序数组中的最小值 II(hard)

from typing import List


class Solution:
    def findMin(self, nums: List[int]) -> int:
        l = 0
        r = len(nums) - 1
        while l < r:
            m = (l + r) // 2
            if nums[m] < nums[r]:
                r = m
            elif nums[m] > nums[r]:
                l = m + 1
            else:
                r -= 1
        return nums[l]


if __name__ == '__main__':
    x = Solution()
    s = [2, 0, 1, 1, 1]
    print(x.findMin(s))

2. 两数相加

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:
        x = l1
        y = l2
        tag = 0
        pre = None
        while x != None and y != None:
            x.val += (y.val + tag)
            tag = 0
            if x.val >= 10:
                tag = 1
                x.val -= 10
            pre = x
            x = x.next
            y = y.next
        if x == None:
            pre.next = y
            x = pre.next
        while x != None:
            x.val += tag
            tag = 0
            if x.val >= 10:
                tag = 1
                x.val -= 10
            pre = x
            x = x.next
        if tag == 1:
            pre.next = ListNode(1)
        return l1


if __name__ == '__main__':
    x = Solution()
    a = ListNode(8)
    b = ListNode(7, a)
    c = ListNode(6, b)
    d = ListNode(4, c)

    a1 = ListNode(8)
    b1 = ListNode(7, a1)
    c1 = ListNode(6, b1)
    d1 = ListNode(4, c1)

    ans = x.addTwoNumbers(a, c1)

    print('')

445. 两数相加 II

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:
        x = []
        i = l1
        j = l2
        while i != None and j != None:
            i = i.next
            j = j.next
        m = l1
        n = l2
        while m != None and i != None:
            x.append(m.val)
            m = m.next
            i = i.next
        while n != None and j != None:
            x.append(n.val)
            n = n.next
            j = j.next
        while m != None and n != None:
            x.append(m.val + n.val)
            m = m.next
            n = n.next
        ans = None
        tag = 0
        while len(x) != 0:
            v = x.pop() + tag
            tag = v // 10
            temp = ListNode(v % 10)
            temp.next = ans
            ans = temp
        if tag == 1:
            temp = ListNode(1)
            temp.next = ans
            ans = temp
        return ans


if __name__ == '__main__':
    x = Solution()
    a = ListNode(8)
    b = ListNode(7, a)
    c = ListNode(6, b)
    d = ListNode(4, c)

    a1 = ListNode(8)
    b1 = ListNode(7, a1)
    c1 = ListNode(6, b1)
    d1 = ListNode(7, c1)

    ans = x.addTwoNumbers(d, d1)
    while ans != None:
        print(ans.val)
        ans = ans.next

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值