Study Plan For Algorithms - Part46

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
posted @ 2024-09-29 07:26  WindMay  阅读(2)  评论(0编辑  收藏  举报