动态规划中级教程91. Decode Ways
来源:互联网 发布:mysql 客户端查询乱码 编辑:程序博客网 时间:2024/06/05 08:14
先看题目
A message containing letters from A-Z is being encoded to numbers using the following mapping:'A' -> 1'B' -> 2...'Z' -> 26Given 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.
题目大意: 给我们一个字符串只包含数字0-9,告诉我们’a’-‘z’对应数字的’1’-“26”
问我们一共可以得到多少不同的解码方式
问题是多少种不同,很容易想到动态规划
先定义动态规划状态 dp[i]代表[0,i]可以组成多少种不同的编码方式
接着定义初时状态
dp[0] = 1 (‘1’-‘9’)
dp[0] = 0 (‘0’)
上面的初时状态代表 ‘1’-‘9’那么一种否则0种
接着我们填写dp[1]
如果[0,1]构成的两个字符大小在(10-26)之间代表本身是一种解码方式
dp[1]++;
如果[1]是合法的那么
dp[1] = 1+dp[0];
接着我们可以分析后面的状态并且写出状态转移方程
dp[i] = (如果本身着一位可以编码并且和前一位的和可以编码)dp[i-1]+dp[i-2].
dp[i] = ( 如果本身可以编码但是前一位不可以编码) dp[i-1].
dp[i] = (如果本身不可以编码但是前一位和可以编码) dp[i-2].
状态转移写完后可以写出相应的程序如下
class Solution {public: bool islegal( string s ){ int num = 0 ; for( int i=0 ; i<s.size() ; i++){ num = num * 10 + s[i] -'0'; } if( num >=10 && num <= 26) { return true ;} return false; } int numDecodings(string s) { if( s.size() == 0 ){ return 0 ;} if( s.size() == 1 ){ return (s[0]!='0') ; } int dp[s.size()]; memset( dp , 0 , sizeof( dp ) ) ; if(s[0]!='0' ){ dp[0] = 1 ; } else{ dp[0] = 0 ; } if( islegal( s.substr( 0 , 2 ) ) ) { if( s[1] =='0'){ dp[1] = 1 ; } else{ dp[1] = 2; } } else{ if( s[1] == '0' ){ dp[1] = 0 ; } else { dp[1] = dp[0] ;} } for( int i = 2 ; i< s.size() ; i++ ){ if( s[i] != '0' ){ if( islegal( s.substr( i-1 , 2 ) ) ){ dp[i] = dp[i-1] + dp[i-2]; } else{ dp[i] = dp[i-1] ; } } else{ if( islegal( s.substr( i-1 , 2 ) ) ){ dp[i] = dp[i-2]; } else{ dp[i] = 0 ; } } } return dp[s.size()-1] ; }};
时间复杂度分析
空间复杂度分析
阅读全文
0 0
- 动态规划中级教程91. Decode Ways
- Decode Ways 动态规划
- Leetcode 动态规划 Decode Ways
- [LeetCode] [动态规划] Decode Ways
- decode-ways(动态规划)
- LeetCode Decode Ways(动态规划)
- 13.10—动态规划—Decode Ways
- 动态规划——Decode Ways[LeetCode]
- 动态规划hard--639. Decode Ways II
- leetcode 91. Decode Ways DP动态规划+DFS深度优先遍历
- 10.【动态规划】Decode Ways--Time Limit Exceeded
- 算法学习之动态规划(leetcode 91 Decode Ways)
- leetcode 639. Decode Ways II 动态规划DP
- 动态规划中级教程 322. Coin Change
- 动态规划中级教程 343. Integer Break
- 动态规划中级教程 279. Perfect Squares
- Leetcode 91. Decode Ways&&639.Decode ways
- [Leetcode] 91. Decode Ways
- Python---64位的windows系统中python的下载与安装
- Java高并发 一 [几个重要概念]
- ConfigReader(四十七)—— ReadSkillAccountCfg
- 回显select
- IIS的发布--遇到的问题
- 动态规划中级教程91. Decode Ways
- iOS 几种存储方式
- bzoj 1799: [Ahoi2009]self 同类分布
- Comparative analysis of methods for detecting interacting loci
- word-break Java code
- 安卓adb命令刷新图库
- HTML学习
- 有关Best-effort理解的相关资料汇总
- c++入门