zoukankan      html  css  js  c++  java
  • 91.解码方法(动态规划)

    一条包含字母 A-Z 的消息通过以下方式进行了编码:

    'A' -> 1
    'B' -> 2
    ...
    'Z' -> 26
    给定一个只包含数字的非空字符串,请计算解码方法的总数。

    初思路:

      一看到本题,我就想用回溯算法来递归,因为遇到 10<s[:2]<27的时候 就可以递归两条路径,一条是分开,一条是合并

      但是递归方法时间复杂度高,存在大量的重复计算,比如 分开转化s[0],s[1] 与合并s[0:2],还是回到处理 s[2:]的路径上,所以我再去看看答案。

    观后思路:

      本题确实就是 爬楼梯问题,动态转移方程:   dp[i] = dp[i-1] + dp[i-2]  但是多了一些限制条件

      为什么可以说是爬楼梯问题(动态规划)呢,因为它具有后无效性,前面算出来后与后面无关。

    收获:

      1.状态转移方程很难写,不同情况对cur有不同的赋值: 

          11-19,21-26: cur = fitst + second

       10,20 cur = first 

          出现0的情况还要分辨一下特殊情况,直接return0 

        if int(s[point-1:point+1]) > 10 and int(s[point-1:point+1]) <=26 and int(s[point-1:point+1]) !=20 :
                    cur = first + second
                elif int(s[point-1:point+1]) == 10 or int(s[point-1:point+1]) ==20 : cur = first
                elif int(s[point-1:point+1]) > 26: cur = second
                elif s[point-1:point+1] == '00':
                    flag = 0
                    break
                # <10 就是 s[point-1] =='0'
                else: 
                    if int(s[point-2]) == 1 or int(s[point-2]) == 2: cur = second
                    #出现 505 这种不能翻译
                    else:
                        flag = 0 
                        break
                first,second = second,cur
                point += 1

    下图转自,leetcode精选python答者 NFGC https://leetcode-cn.com/problems/decode-ways/solution/dong-tai-gui-hua-tu-jie-by-nfgc/

      

  • 相关阅读:
    再论 ASP.NET 中获取客户端IP地址
    修改MariaDB 路径
    CentOS MariaDB 安装和配置
    asp.net core 使用protobuf
    Xamarin绑定微信SDK 实现分享功能
    iOS中转义后的html标签如何还原
    MvvmCross框架在XamarinForms中的使用入门
    Xamarin.Form 初学 之 服务引用-WCF服务引用
    程序员求职面试三部曲之三:快速适应新的工作环境
    程序员求职面试三部曲之二:提高面试的成功率
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12252139.html
Copyright © 2011-2022 走看看