zoukankan      html  css  js  c++  java
  • leetcode刷题笔记九十一题 解码方法

    leetcode刷题笔记九十一题 解码方法

    源地址:91. 解码方法

    问题描述:

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

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

    示例 1:

    输入: "12"
    输出: 2
    解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。
    示例 2:

    输入: "226"
    输出: 3
    解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。

    /**
    仔细分析,本题其实类似爬楼梯问题,也是动态规划的题目
    根据前后两个字符,判断具体情况:
    对于s.substring(i-1, i+1),即s(i-1)与s(i)
    1.不为10、20,且小于等于26,认为这两个字符可以各自分开或合为一体
    2.大于26,则这两个字符必须分开
    3.等于10或者20的情况下,只能作为10或20
    4.i位为0且i-1位大于2或等于0,返回0
    */
    object Solution {
        def numDecodings(s: String): Int = {
            val length = s.length
            if(s(0) == '0') return 0
    
            var cur = 1
            var pre = 1
            for(i <- 1 to length-1){
                val temp = cur
                if(s(i) == '0'){
                 //这种情况下s(i-1)与s(i)固定组成10或20 cur=pre
                    if(s(i-1) == '1' || s(i-1) == '2')  cur = pre
                    else return 0
                }
                else {
                    if(s(i-1) == '1' ||(s(i-1) == '2' && s(i) >= '1' && s(i) <= '6'))  cur = cur + pre
                }
               	//如27这种不同于20,2并不能受7的影响,其可以与i-2位组成两位数,所以cur保持不变
                pre = temp
            }
            return cur
        }
    }
    
  • 相关阅读:
    用dockerFile和docker build命令 创建带两个数据卷的新镜像
    Docker 学习 3 镜像更多命令 docker commit 提交容器副本,使之成为一个新的镜像
    Docker学习笔记 2 更多的容器命令
    Docker的学习1 安装 与 基础篇
    SeekBar(拖动条)
    本周总结
    ProgressBar(进度条)
    Android对话框
    css语法
    css基础
  • 原文地址:https://www.cnblogs.com/ganshuoos/p/13399347.html
Copyright © 2011-2022 走看看