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