0
点赞
收藏
分享

微信扫一扫

LeetCode46_把数字翻译成字符串


1. 题目

给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。

示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,分别是"bccfi", "bwfi", "bczi", "mcfi""mzi"

提示:
0 <= num < 231

2. 题解

class Solution:
def __init__(self):
self.count = 0

def translate(self, new_str):
# 方式一
alphabet = "abcdefghijklmnopqrstuvwsyz"
dic = {}
for i in range(len(alphabet)):
dic[str(i)] = alphabet[i]

# 方式二
# dic = {'0': 'a', '1': 'b', '2': 'c', '3': 'd', '4': 'e', '5': 'f', '6': 'g', '7': 'h', '8': 'i', '9': 'j',
# '10': 'k', '11': 'l', '12': 'm', '13': 'n', '14': 'o', '15': 'p', '16': 'q', '17': 'r', '18': 's',
# '19': 't', '20': 'u', '21': 'v', '22': 'w', '23': 's', '24': 'y', '25': 'z'}

if len(new_str) == 0:
self.count += 1
return

if new_str[0] in dic.keys():
self.translate(new_str[1:])

if len(new_str) > 1:
if new_str[:2] in dic.keys():
self.translate(new_str[2:])

def translateNum(self, num: int) -> int:
self.translate(str(num))
return self.count


if __name__ == "__main__":
s = Solution()
a = s.translateNum(12258)
print(a)

3. 变形,题目改成输出结果为[“bccfi”, “bwfi”, “bczi”, “mcfi"和"mzi”],即分别是哪些

class Solution:
def translate(self, new_str, path, temp_str):
# 方式一
alphabet = "abcdefghijklmnopqrstuvwsyz"
dic = {}
for i in range(len(alphabet)):
dic[str(i)] = alphabet[i]

if len(new_str) == 0:
path.append(temp_str)
return

if new_str[0] in dic.keys():
temp_str1 = temp_str + dic[new_str[:1]]
self.translate(new_str[1:], path, temp_str1)

if len(new_str) > 1:
if new_str[:2] in dic.keys():
temp_str2 = temp_str + dic[new_str[:2]]
self.translate(new_str[2:], path, temp_str2)

def translateNum(self, num: int) -> int:
path = []
self.translate(str(num), path, "")
return path


if __name__ == "__main__":
s = Solution()
a = s.translateNum(12258)
print(a)

# ['bccfi', 'bczi', 'bwfi', 'mcfi', 'mzi']


举报

相关推荐

0 条评论