面试题46. 把数字翻译成字符串

Medium

思路

首先分析一下题目,对于例子12258

尝试使用递归求解,AC!

代码

python3

class Solution:
    @lru_cache(None)
    def dfs(self, res):
      if res == '':
        return 1
      if int(res) < 10:
        return 1
      result = 0
      if int(res[0:2]) < 26 and int(res[0:2]) > 9:
        result += self.dfs(res[2:])
      result += self.dfs(res[1:])
      return result
      
    def translateNum(self, num: int) -> int:
      return self.dfs(str(num))

细心的小伙伴发现我们这道题放在了dp类别中,我们这题也可以使用动态规划来做。(很多的dp题,我们都可以先考虑记忆化递归的方法,然后再转化成bottom-up 动态规划方法,这样个人感觉思路会比较清晰)

转换思路

代码

python3

class Solution:
    def translateNum(self, num: int) -> int:
      dp = [0] * (len(str(num)) + 1)
      dp[0] = 1
      dp[1] = 1
      for i in range(2, len(str(num)) + 1):
        temp = int(str(num)[i-2:i])
        if temp > 9 and temp < 26:
          dp[i] += dp[i-2]
        dp[i] += dp[i-1]
      print(dp)
      return dp[-1]