leetcode6-09每日一题:把数字翻译成字符串

今天是我第一次这么快就做完了一道动态规划的题……我只能说递归真香😀(告诉以前那个不用递归地自己)
今天的题目如下所示:
在这里插入图片描述
这道题看似要把最终的字符串给翻译出来,但是实际上并不需要,因为我们只需要考虑输入的数字可以怎么样拆分成不同的数字来进行翻译就可以了。比如说图上的示例,12258可以分成:(1,2,2,5,8),我们只要知道可以这样分就可以了,并不需要去翻译。
因为每一次的步长和最终字符串长度都会有不同,因此我们可以认为最后能正常输出的结果都是不同的,所以可以直接考虑上所有可能的正常输出结果,而不需要去去重。
在这题里,我用了递归来解题。我用一个小列表记录把给定数字拆散的过程,在拆完了之后,就把小列表加入到一个最终的大列表中。最后对大列表中的小列表进行计数,就能得到最终结果啦!这里有两个步长,就是分成0-9和10-25两种情况来考虑下一步要怎么走。
下面是我的代码:

class Solution:
    def translateNum(self, num: int) -> int:
        str_num = str(num)
        final = []
        self.judge(str_num, [], final)
        return len(final)

    def judge(self, strs, small_list, big_list):
        #分一位数和两位数的情况来考虑,如果要输出一个两位数,注意它的值要不小于10
        if strs == '':
            big_list.append(small_list)
        else:
            self.judge(strs[1:], small_list + [strs[0]], big_list)
            if len(strs) >= 2 and int(strs[:2]) < 26 and int(strs[:2]) > 9:
                self.judge(strs[2:], small_list + [strs[:2]], big_list)

用了好几次递归之后,感觉越来越熟练了,这道题也是一看到就想到了用递归来解决。看来刷题还是很有用的🤭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值