leetcode 91. Decode Ways DP动态规划+DFS深度优先遍历
来源:互联网 发布:java初学者视频教程 编辑:程序博客网 时间:2024/06/06 07:13
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.
这道题考察的是解码,本质就是DFS深度优先遍历。不过网上看了一个基于DP的解决方法,也很简答。
代码如下:
import java.util.Arrays;public class Solution{ int res=0; public int numDecodings(String s) { if(s==null || s.length()<=0) return res; //DP 做法 int []nums=new int[s.length()+1]; //num[0]必须初始化为1 nums[0]=1; nums[1]=s.charAt(0)=='0'? 0:1; //下面是动态规划去实现, for(int i=2;i<=s.length();i++) { if (s.charAt(i - 1) != '0') nums[i] = nums[i - 1]; if (s.charAt(i - 2) != '0' && Integer.parseInt("" + s.charAt(i - 2) + s.charAt(i - 1)) < 27) nums[i] += nums[i - 2]; } return nums[s.length()]; } private void getNum(String s, int index) { if(index==s.length()) res++; else { int a=(int)(s.charAt(index)-'0'); if(a==0) return; getNum(s, index+1); if(index+1 < s.length() && a<=2 && a*10+(int)(s.charAt(index+1)-'0')<=26) getNum(s, index+2); } }}
下面是C++的做法,就是一个DP动态规划问题,这个和斐波那契额序列很像
代码如下:
#include <iostream>#include <algorithm>#include <vector>using namespace std;class Solution {public: int numDecodings(string s) { if (s.size() <= 0) return 0; vector<int> dp(s.length() + 1, 0); dp[0] = 1; dp[1] = s[0] >= '1' && s[0] <= '9' ? 1 : 0; for (int i = 2; i <= s.length(); i++) { if (s[i - 1] != '0') dp[i] = dp[i - 1]; int one = (int)(s[i - 2] - '0') * 10 + (int)(s[i - 1] - '0'); if (s[i - 2] != '0' && one <= 26) dp[i] += dp[i - 2]; } return dp[s.length()]; }};
阅读全文
0 0
- leetcode 91. Decode Ways DP动态规划+DFS深度优先遍历
- leetcode 377. Combination Sum IV 组合之和 + DP动态规划 + DFS深度优先遍历
- leetcode 416. Partition Equal Subset Sum 动态规划DP + DFS深度优先遍历
- leetcode 494. Target Sum 深度优先遍历DFS + DP动态规划
- Leetcode 动态规划 Decode Ways
- [LeetCode] [动态规划] Decode Ways
- LeetCode Decode Ways(动态规划)
- leetcode 639. Decode Ways II 动态规划DP
- leetcode 140. Word Break II 动态规划DP + DFS深度优先搜索
- 动态规划——Decode Ways[LeetCode]
- HDU1011Starship Troopers(DP+DFS)深度优先搜索+动态规划
- leetcode 337. House Robber III DP动态规划 + DFS深度有限遍历
- Decode Ways 动态规划
- Decode Ways [leetcode] DP
- 【Leetcode】Decode Ways (DP)
- [LeetCode] Decode Ways(!!!DP)
- leetcode---decode-ways--dp
- 动态规划中级教程91. Decode Ways
- 解读Android官方MVP项目单元测试
- if的结构书写规范:
- 嵌入式-转自百度文库
- javawebday05(添加 插入节点 标签 替换复制节点)
- 流复制与PG版本的关系
- leetcode 91. Decode Ways DP动态规划+DFS深度优先遍历
- Iconfont字体图标
- 通知(Notification)
- 【软考之旅】第五章 数据库
- 程序12
- Java jdk 快速配置
- if选择结构和while循环及for循环
- Samba共享服务——实现Linux(ubuntu)与Windows共享文件
- Android随笔:单元测试的好处