[LeetCode][Java] Decode Ways
来源:互联网 发布:知乎匿名的回答在哪里 编辑:程序博客网 时间:2024/05/17 03:16
题目:
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.
题意:
一则包含字母A-Z
的信息被编码成数字:
'A' -> 1'B' -> 2...'Z' -> 26给定一则包含数字的编码信息,判定出最终一共有多少种解码方式。
比如:
给定编码信息"12",它可以被解码成"AB"
(12)或者"L"
(12).
最终的解码方式为2.
算法分析:
参考博客: http://blog.csdn.net/u011095253/article/details/9248109
* 从头到尾扫这个String,比如我们想知道到,从第一位到dp[i]这一位组成的String,有多少种解码组合,那么有两种情况
* 第一:如果dp[i]所对应的的单个字符可以解码,那么dp[i]就包括前dp[i-1]位所积累的组合数 dp[i] = dp[i-1]
* 第二:如果不仅dp[i]所对应的的单个字符可以解码,dp[i-1] - dp[i],两个字符组成的也可以解码,
* 那么不仅包括dp[i-1]积累的组合数,也包括dp[i-2]位积累的组合数 dp[i] = dp[i-1] + dp[i-2]
* 我们建一个n+1的数组,为了程序简洁,我们在最前面放一个1。这样一来要注意数组里的index -1==String里的index
AC代码:
<span style="font-family:Microsoft YaHei;font-size:12px;">public class Solution { public int numDecodings(String s) { int n = s.length(); if (n==0) return 0; int[] dp = new int[n+1]; dp[0] = 1; if (isValid(s.substring(0,1))) dp[1] = 1; else dp[1] = 0; for(int i=2; i<=n;i++) { if (isValid(s.substring(i-1,i))) dp[i] = dp[i-1]; if (isValid(s.substring(i-2,i))) dp[i] += dp[i-2]; } return dp[n]; } public boolean isValid(String s) { if (s.charAt(0)=='0') return false; int code = Integer.parseInt(s); return code>=1 && code<=26; }}</span>
- [Leetcode] Decode Ways (Java)
- [LeetCode][Java] Decode Ways
- [leetcode]91. Decode Ways(Java)
- [LeetCode]--91. Decode Ways(Python + Java)
- Leetcode 91. Decode Ways&&639.Decode ways
- LeetCode: Decode Ways
- [LeetCode]Decode Ways
- LeetCode Decode Ways
- LeetCode : Decode Ways
- [Leetcode] Decode Ways *
- [leetcode] Decode Ways (!!)
- leetcode 17: Decode Ways
- Leetcode: Decode ways
- LeetCode Decode Ways
- [LeetCode]Decode Ways
- [leetcode] Decode Ways
- Leetcode: Decode Ways
- [LeetCode] Decode Ways
- Django模型修改及数据迁移
- jquery 自定义事件
- Check if you are behind a transparent proxy
- WCF回调中的死锁
- A20平台增加camera
- [LeetCode][Java] Decode Ways
- 【Android】使用 SwipeRefreshLayout 实现下拉刷新
- 前言
- 杭电 HDU 1247 ACMHat’s Words(trie树 或着STL)
- 使用testng listener实现测试用例失败重跑功能
- 什么是事务的传播特性?
- LeetCodeOJ_168_Excel Sheet Column Title
- 选择排序(selection sort)
- Linux关机命令详解