zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):091 Decode Ways

    题目来源


    https://leetcode.com/problems/decode-ways/

    A message containing letters from A-Z is being encoded to numbers using the following mapping:

    'A' -> 1
    'B' -> 2
    ...
    'Z' -> 26
    

    Given an encoded message containing digits, determine the total number of ways to decode it.

    For example,
    Given encoded message "12", it could be decoded as "AB" (1 2) or "L" (12).

    The number of ways decoding "12" is 2.


    题意分析


    Input: 一个字符串

    Output:可以编码的方式数目

    Conditions:a到z分别对应1到26


    题目思路


    采用动态规划的思想,dp初始化为[1,1],以两个字符来考虑

    1)如果10 <= int(s[i-2:i]) <= 26 and s[i - 1] != "0",说明有两种选择方式,dp[i] = dp[i-1] + dp[i-2]

    2)如果刚好等于10或者20,那么dp[i] = dp[i-2]

    3)如果s[i-1]不为0,说明不是30,40等数字,dp[i] = dp[i-1]

    4)如果不满足以上条件,那么不可能编码成功,返回0


    AC代码(Python) 

     1 class Solution(object):
     2     def numDecodings(self, s):
     3         """
     4         :type s: str
     5         :rtype: int
     6         """
     7         if s == "" or s[0] == "0":
     8             return 0
     9         dp = [1,1]
    10         for i in range(2, len(s) + 1):
    11             if 10 <= int(s[i-2:i]) <= 26 and s[i - 1] != "0":
    12                 dp.append(dp[i-1] + dp[i-2])
    13             elif int(s[i-2:i]) == 10 or int(s[i-2:i]) == 20:
    14                 dp.append(dp[i-2])
    15             elif s[i-1] != "0":
    16                 dp.append(dp[i-1])
    17             else:
    18                 return 0
    19         return dp[len(s)]
    20  
  • 相关阅读:
    visio 2019 激活方法
    sftp 多用户安装与配置
    CentOS configuration uses the SFTP server
    esxi命令行强行关闭虚拟机
    esxi 版本升级命令
    存储分析 开源重复数据删除技术崭露头角
    最简单-转换MBR为GPT
    CentOS 7 搭建本地YUM仓库,并定期同步阿里云源
    uml建模工具介绍
    C/C++中extern关键字详解
  • 原文地址:https://www.cnblogs.com/loadofleaf/p/5455767.html
Copyright © 2011-2022 走看看