每日一练7.12——将数字转换为字符串

将数字转换为字符串

# 递归解法
class Solution:
    def translateNum(self, num: int) -> int:
        def trans(num):
            if len(num) <= 1:
                return 1
            
            count = 0
            count += trans(num[1:])
            if num[0] != "0" and int(num[:2]) < 26:
                count += trans(num[2:])
            return count
        return trans(str(num))


# 二分
class Solution:
    def translateNum(self, num: int) -> int:
        num = str(num)
        def trans(begin, end):
            if end - begin <= 0:
                return 1
            mid = begin + (end - begin) // 2
            flag = 0
            p = trans(begin, mid)
            q = trans(mid + 1, end)
            if 1 <= int(num[mid]) <= 2 and int(num[mid:mid + 2]) < 26:
                flag = trans(begin, mid - 1) * trans(mid + 2, end)
            return p * q + flag
        return trans(0, len(num) - 1)

# 动态规划
class Solution:
    def translateNum(self, num: int) -> int:
        num = str(num)
        n = len(num)
        if n <= 1:
            return 1
        dp = [1, 1]
        i = 1
        while i < n:
            if num[i - 1] == '1' or (num[i - 1] == '2' and num[i] in "012345"):
                tmp = dp[0] + dp[1]
            else:
                tmp = dp[1]
            dp[0] = dp[1]
            dp[1] = tmp
            i += 1
        return dp[-1]
# TODO: 减少时间复杂度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值