leetcode-4.25[66. 加一、58. 最後一個單詞的長度、53. 最大子序和](python解法)

題目1

在這裏插入圖片描述

題解1

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        n = len(digits)-1
        digits[n] += 1
        while n >= 0:
            # 如果第一個數爲10,則必須在首位前添加一個元素
            if digits[0] == 10:
                digits[n] = 0
                digits.insert(0,1)
                break
            if digits[n] >= 10:
                digits[n] = 0
                digits[n-1] += 1
            n -= 1
        return digits

題目2

在這裏插入圖片描述

題解2

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        lenght = len(s.split()[-1]) if s.split() != [] else 0
        return lenght

題目3

在這裏插入圖片描述

題解3

class Solution:
    """
    動態規劃分析過程:
        1. input: nums = [-2,1,-3,4,-1,2,1,-5,4]
        2. output: 返回一個最大和的連續子數組
        3. 子問題: DP[i] 表示到第i個元素上的最大序列和
        4. 子問題間的遞歸關係: “猜測第i個元素在序列中”
            DP[i] = DP[i-1] + nums[i] 如果第i元素在最大序列中
            DP[i] = nums[i] # 如果第i個元素不在最大子序列中,則重新開始,當做第一個元素
            最後對以上兩種在與不在的兩種情況取最大值, max(DP[i-1]+A[i], A[i])
        5. 邊界條件: nums[0] = 0
        6. 滿足後一個DP都是由前面一個DP得到,滿足拓撲規則
        7. 畫表
            i(下標)    0    1    2   3   4   5   6   7   8   9
            nums(元素)     -2    1  -3   4  -1   2   1  -5   4
            DP(最大和) 0   -2    1  -2   4   3   5   6   1   5
    """
    def maxSubArray(self, nums: List[int]) -> int:
        DP = [None]*(len(nums)+1)
        DP[0] = 0
        for i in range(1,len(nums)+1):
            DP[i] = max(DP[i-1] + nums[i-1], nums[i-1])
        return max(DP[1:])  # DP[1:]去除DP[0]對結果的影響
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章