博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode - Decode Ways
阅读量:7236 次
发布时间:2019-06-29

本文共 3073 字,大约阅读时间需要 10 分钟。

题目:

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.

思路:

分情况讨论

1. 当前字符为0

    1.1 前一个字符为0,3-9.

    1.2 前一个字符为1,2

2. 当前字符非0

    2.1 前一个字符为0,3-9

    2.2 前一个字符为2,当前字符为7-9

    2.3 余下情况

package dp;public class DecodeWays {    public int numDecodings(String s) {        int n;        if (s == null || (n = s.length()) == 0) return 0;        int[] dp = new int[n + 1];        dp[0] = 1;        if (s.charAt(0) == '0') return 0;        dp[1] = 1;        for (int i = 2; i <= n; ++i) {            if (s.charAt(i - 1) == '0') {                if (s.charAt(i - 2) != '1' && s.charAt(i - 2) != '2') return 0;                dp[i] = dp[i - 2];            } else if (s.charAt(i - 2) == '0' || s.charAt(i - 2) > '2' ||                     (s.charAt(i - 2) == '2' && s.charAt(i - 1) > '6')) {                dp[i] = dp[i - 1];            } else {                dp[i] = dp[i - 1] + dp[i - 2];            }        }        return dp[n];    }        public static void main(String[] args) {        // TODO Auto-generated method stub        DecodeWays d = new DecodeWays();        System.out.println(d.numDecodings("10") == 1);        System.out.println(d.numDecodings("101") == 1);        System.out.println(d.numDecodings("1001") == 0);        System.out.println(d.numDecodings("10012") == 0);        System.out.println(d.numDecodings("0012") == 0);        System.out.println(d.numDecodings("12") == 2);        System.out.println(d.numDecodings("128") == 2);        System.out.println(d.numDecodings("27") == 1);        System.out.println(d.numDecodings("99") == 1);    }}

 更简化一下:

package dp;public class DecodeWays {    public int numDecodings(String s) {        int n;        if (s == null || (n = s.length()) == 0) return 0;        int[] dp = new int[n + 1];        dp[0] = 1;        if (s.charAt(0) == '0') return 0;        dp[1] = 1;        for (int i = 2; i <= n; ++i) {            int c1 = 0;            if (s.charAt(i - 1) != '0')                c1 = dp[i - 1];            int c2 = 0;            if (s.charAt(i - 2) == '1' || (s.charAt(i - 2) == '2' && s.charAt(i - 1) < '7'))                c2 = dp[i - 2];            dp[i] = c1 + c2;        }                return dp[n];    }        public static void main(String[] args) {        // TODO Auto-generated method stub        DecodeWays d = new DecodeWays();        System.out.println(d.numDecodings("10") == 1);        System.out.println(d.numDecodings("101") == 1);        System.out.println(d.numDecodings("1001") == 0);        System.out.println(d.numDecodings("10012") == 0);        System.out.println(d.numDecodings("0012") == 0);        System.out.println(d.numDecodings("12") == 2);        System.out.println(d.numDecodings("128") == 2);        System.out.println(d.numDecodings("27") == 1);        System.out.println(d.numDecodings("99") == 1);    }}

 

转载地址:http://pqofm.baihongyu.com/

你可能感兴趣的文章
移动端调试篇
查看>>
时间的符号
查看>>
Debian8 + Flask + Nginx + uWSGI + uWSGI Emperor 基本配置文件注意事项
查看>>
iOS必读 - 收藏集 - 掘金
查看>>
对javascript事件的深度理解
查看>>
《javascript高级程序设计》笔记:Number类型
查看>>
Vue全家桶仿闲鱼移动端App
查看>>
Redis 有序集合
查看>>
mobile调试方法
查看>>
elasticsearch 爬坑记
查看>>
Fundebug能够捕获这些BUG
查看>>
React系列---Redux异步流
查看>>
[LeetCode] Different Ways to Add Parentheses
查看>>
C++11: 右值引用 addition
查看>>
【Memache】部署Memcache,采用Supervisord管理
查看>>
微服务指南走北(五):什么样的服务才可以说是微服务?
查看>>
在virtualbox 下安装ubuntu 并配置共享文件夹
查看>>
cp、mv、install
查看>>
Redis学习笔记——dict
查看>>
前端实例练习 - 动效伸缩搜索框
查看>>