有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。
现在给一串数字,返回有多少种可能的译码结果
数据范围:字符串长度满足
进阶:空间复杂度 ,时间复杂度
有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。
"12"
2
2种可能的译码结果(”ab” 或”l”)
"31717126241541717"
192
192种可能的译码结果
class Solution: def solve(self , nums ): # write code here if not nums: return if len(nums) == 1: if nums == '0': return 0 return 1 n = len(nums) x, y = 1, 1 for i in range(0, n-1): if int(nums[i:i+2]) == 0: return 0 elif 11 <= int(nums[i:i+2]) <= 26: res = x + y else: res = y x = y y = res return res
# # 解码 # @param nums string字符串 数字串 # @return int整型 # 动态规划,dp[0]和dp[1]的构造场景比较多 class Solution: def solve(self, nums): # write code here if not nums&nbs***bsp;nums[0] == "0": return 0 dp = [1] if len(nums) > 1: if nums[1] == "0": if int(nums[0]) > 2: return 0 dp.append(1) elif int(nums[0]) < 2&nbs***bsp;(int(nums[0]) == 2 and int(nums[1]) <= 6): dp.append(2) else: dp.append(1) for i in range(2, len(nums)): if nums[i] == "0": if int(nums[i-1]) > 2&nbs***bsp;nums[i-1] == "0": return 0 dp.append(dp[i-2]) else: dp.append(dp[i-1] + dp[i-2] if int(nums[i-1:i+1]) <= 26 and nums[i-1] != "0" else dp[i-1]) return dp[-1]
class Solution: def solve(self, nums: str): if nums[0] == '0': return 0 a = 1 b = 1 for i in range(1, len(nums)): tmp = b if nums[i] != '0' else 0 if 9 < int(nums[i-1:i+1]) <= 26: tmp += a a, b = b, tmp return b