力扣 天天見(python3 每次三題 第一次)

1. 兩數之和

給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。

你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個數組中同樣的元素。

示例:

給定 nums = [2, 7, 11, 15], target = 9

因爲 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

通過例程(字典)

class Solution:
    def twoSum(self, nums, target):

        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        d = {}
        size = 0
        while size < len(nums):
            if nums[size] not in d:
                d[nums[size]] = size
            if target - nums[size] in d:
                if d[target-nums[size]] < size:
                    return (d[target-nums[size]],size)
            size +=1

2. 兩數相加

給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。

如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。

您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

示例

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

通過例程(最優解)這題我覺得有問題。試試 315+499

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        if l1 is None:
            return l2
        if l2 is None:
            return l1
        
        tmp = ListNode(0)
        res = tmp
        flag = 0
        while l1 or l2:
            tmpsum = 0
            if l1:
                tmpsum = l1.val 
                l1 = l1.next
            if l2:
                tmpsum +=l2.val
                l2 = l2.next
            flag,tmpres = divmod((tmpsum + flag),10)
            # tmpres = ((tmpsum + flag) % 10)
            # flag = ((tmpsum + flag) // 10)
            res.next = ListNode(tmpres)
            res = res.next
	        if flag:
	            res.next = ListNode(1)
        res = tmp.next
        del tmp
        return res

3.重複字符的最長子串

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

class Solution:
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        l= 0
        start = 0
        dic = {}
        for i in range(len(s)):
            cur = s[i]
            if cur not in dic.keys():
                dic[cur] = i
            else:
                if dic[cur] + 1 > start:
                    start = dic[cur] + 1
                dic[cur] = i
            if i - start + 1 > l:
                l = i - start + 1
        return l
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章