[LeetCode]--91. Decode Ways(Python + Java)
来源:互联网 发布:动易cms后台登录密码 编辑:程序博客网 时间:2024/05/01 07:08
See the Problem!
The solution is absolutely Dynamic Programing!
1. Java Solution
Reference:Java clean DP solution with explanation
1.1 use a dp array of size n + 1 to save subproblem solutions. dp[0] means an empty string will have one way to decode, dp[1] means the way to decode a string of size 1. I then check one digit and two digit combination and save the results along the way. In the end, dp[n] will be the end result.
public class Solution { public int numDecodings(String s) { if(s == null || s.length() == 0) { return 0; } int n = s.length(); int[] dp = new int[n+1]; dp[0] = 1; dp[1] = s.charAt(0) != '0' ? 1 : 0; for(int i = 2; i <= n; i++) { int first = Integer.valueOf(s.substring(i-1, i)); // if first == 0, just dp[i] doesn't change! if(first >= 1 && first <= 9) { dp[i] += dp[i-1]; } if(second >= 10 && second <= 26) { dp[i] += dp[i-2]; } } return dp[n]; }}
- Python Solution.
Reference: Python DP solution_by_tusizi
A digit from index 1 have three condition- ’?10’ or ‘?20’ this can only divide into ‘10’ or ‘20’ , f(n) = f(n-2)
- ‘?26’ this can divide into ‘6’ or ‘26’, f(n) = f(n-2)+f(n-1)
- ‘?09’, ‘?27’ this can only divide into ‘9’ or ‘7’ , f(n) = f(n-1)*
*
class Solution:# @param s, a string# @return an integerdef numDecodings(self, s): if not s or s.startswith('0'): return 0 stack = [1, 1] for i in range(1, len(s)): if s[i] == '0': if s[i-1] == '0' or s[i-1] > '2': # only '10', '20' is valid return 0 stack.append(stack[-2]) elif 9 < int(s[i-1:i+1]) < 27: # '01 - 09' is not allowed stack.append(stack[-2]+stack[-1]) else: # other case '01, 09, 27' stack.append(stack[-1]) return stack[-1]
0 0
- [LeetCode]--91. Decode Ways(Python + Java)
- [Leetcode]91. Decode Ways@python
- [leetcode]91. Decode Ways(Java)
- [Leetcode] Decode Ways - python
- [Leetcode][python]Decode Ways
- [Leetcode] Decode Ways (Java)
- [LeetCode][Java] Decode Ways
- Leetcode 91. Decode Ways&&639.Decode ways
- [Leetcode] 91. Decode Ways
- LeetCode --- 91. Decode Ways
- [LeetCode]91.Decode Ways
- [leetcode] 91.Decode Ways
- [leetcode] 91. Decode Ways
- Leetcode 91. Decode Ways
- leetcode 91. Decode Ways
- Leetcode 91. Decode Ways
- leetcode 91. Decode Ways
- LeetCode 91. Decode Ways
- apache 配置与使用
- bootstrap模态框垂直居中效果
- 设计模式之代理模式(Proxy)
- c#可以创建任意控件的拖动
- 基于邻接矩阵图的广度优先遍历
- [LeetCode]--91. Decode Ways(Python + Java)
- bat心得
- shiro实现授权的三种操作
- 解决上传横屏图片不翻转
- 利用无障碍服务(AccessibilityService)批量清理后台进程
- Docker proxy setting ubuntu 14.04
- RabbitMQ(四)远程连接RabbitMQ
- 查看目录下的所有文件
- 《TCP/IP详解 卷1:协议》 读书笔记 第4章 ARP:地址解析协议