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
本文来自博客园,作者:WindMay,转载请注明原文链接:https://www.cnblogs.com/stephenxiong001/p/18438770