Study Plan For Algorithms - Part46

WindMay發表於2024-09-29

1. 解碼方法
一條包含字母 A-Z 的訊息透過以下對映進行了 編碼 :

  • "1" -> 'A'

  • "2" -> 'B'

  • ...

  • "25" -> 'Y'

  • "26" -> 'Z'

給定一個只含數字的 非空 字串 s ,請計算並返回 解碼 方法的 總數 。如果沒有合法的方式解碼整個字串,返回 0。

class Solution:
    def numDecodings(self, s: str) -> int:
        n = len(s)
        if s[0] == '0':
            return 0
        dp = [0] * (n + 1)
        dp[0] = dp[1] = 1
        for i in range(1, n):
            if s[i] == '0':
                if s[i - 1] == '1' or s[i - 1] == '2':
                    dp[i + 1] = dp[i - 1]
                else:
                    return 0
            else:
                if s[i - 1]!= '0' and int(s[i - 1:i + 1]) <= 26:
                    dp[i + 1] = dp[i] + dp[i - 1]
                else:
                    dp[i + 1] = dp[i]
        return dp[n]

2. 反轉連結串列 II
給定單連結串列的頭指標 head 和兩個整數 left 和 right ,其中 left <= right 。請反轉從位置 left 到位置 right 的連結串列節點,返回 反轉後的連結串列 。

class Solution:
    def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:
        dummy = ListNode(-1)
        dummy.next = head
        pre = dummy

        for _ in range(left - 1):
            pre = pre.next

        cur = pre.next
        for _ in range(right - left):
            next_node = cur.next
            cur.next = next_node.next
            next_node.next = pre.next
            pre.next = next_node

        return dummy.next

相關文章