【Leetcode】Decode Ways 解码方式
来源:互联网 发布:淘宝网店转让合法吗 编辑:程序博客网 时间:2024/06/04 19:07
题目: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.
动态规划
复杂度
时间O(n) 空间O(n)
思路
解码是有规律的,所以我们可以尝试动态规划。假设数组dp[i]表示从头到字符串的第i位,一共有多少种解码方法的话,那么如果字符串的第i-1位和第i位能组成一个10到26的数字,说明我们是在第i-2位的解码方法上继续解码。如果字符串的第i-1位和第i位不能组成有效二位数字,而且第i位不是0的话,说明我们是在第i-1位的解码方法上继续解码。所以,如果两个条件都符合,则dp[i]=dp[i-1]+dp[i-2],否则dp[i]=dp[i-1]。
注意
如果出现无法被两位数接纳的0,则无法解码,我们可以一开始就判断,并将其初始化为0,这样后面的相加永远都是加0
代码
public class DecodeWays {public int numDecodings(String s) {if(s.length() == 0) return 0;int[] dp = new int[s.length() + 1];//初始化第一种解码方式dp[0] = 1;//如果第一位是0,则无法解码dp[1] = s.charAt(0) == '0' ? 0 : 1;for(int i = 2; i <= s.length(); i++) {//如果字符串的第i-1位和第i位能组成一个10到26的数字,说明我们可以在第i-2位的解码方法上继续解码if(Integer.parseInt(s.substring(i-2, i)) <= 26 && Integer.parseInt(s.substring(i-2, i)) >= 10) {dp[i] += dp[i-2];}//在第i-1位的解码方法上继续解码if(Integer.parseInt(s.substring(i-1, i)) != 0) {dp[i] += dp[i-1];}}return dp[s.length()];}}
阅读全文
0 0
- 【Leetcode】Decode Ways 解码方式
- LeetCode--Decode Ways(解码方式)Python
- LeetCode OJ 之 Decode Ways (解码方式)
- leetCode 91.Decode Ways (解码方式) 解题思路和方法
- 91. Decode Ways(解码方式)
- Decode Ways(如何解码) 【leetcode】
- LeetCode 91. Decode Ways(解码方法)
- LeetCode 91. Decode Ways(解码方法)
- LeetCode | Decode Ways(译码方式)
- Decode Ways 把字符串解码成数字组合@LeetCode
- 解码方法数 Decode Ways
- lintcode decode-ways 解码方法
- 91. Decode Ways 解码方法
- Leetcode 91. Decode Ways&&639.Decode ways
- LeetCode: Decode Ways
- [LeetCode]Decode Ways
- LeetCode Decode Ways
- LeetCode : Decode Ways
- 【转】java异常
- js中将字符串转换成json的三种方式
- 教你使用windeployqt工具来进行Qt的打包发布
- 你或许不了解的C++函数调用
- java培训第三天
- 【Leetcode】Decode Ways 解码方式
- 主题六 函数(C语言核心)----37.函数递归详解
- 读王垠博文有感
- java语言基础(66)——集合框架(arrayList ConcurrentModificationException 并发修改异常的解决方案)
- MVC下拉控件绑定数据
- 子进程的异步等待方式
- 内核启动分析
- Hbase之表的设计
- iOS学习笔记-078.核心动画04——CATransition(转场动画)