当前位置:   article > 正文

leetcode:统计编码的总数_合法的编码数量leetcode

合法的编码数量leetcode
  1. A message containing letters from A-Z is being encoded to
  2. numbers using the following mapping:
  3. 'A'->1
  4. 'B'->2
  5. ...
  6. 'Z'->26
  7. Given a non-empty string containing only digits,determine the total number
  8. of ways to decode it.
  9. Example 1:
  10. Input:"12"
  11. Output:2
  12. Explanation:It could be decoded as "AB"(1 2) or "L"(12).
  13. Example 2:
  14. Input:"226"
  15. Output:3
  16. Explanation:It could be decoded as "BZ"(2 26),"VF"(22 6),or "BBF"(2 2 6).
  17. 解题思路:
  18. 这道题的意思是给定一个数字型字符串,计算出编码方法的总数.
  19. 这道题选用动态规划的方法.dp[n]保存的是编码长度为n个字符的字符串方法总数.考虑到给定的字符串中
  20. 可能包含'0',因此需要跳过.dp[0]代表空字符串,只有一种编译方法,dp[0]=1.dp[1]需要考虑原字符串
  21. 是否以'0'开头,dp[1]=0,否则dp[1]=1.
  22. 状态转移方程为:
  23. 1<=s[i-1:i]<=9,dp[i]+=dp[i-1];
  24. 10<=s[i-2:i]<=26,dp[i]+=dp[i-2];

C++语言实现

  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5. class Solution{
  6. public:
  7. int decodeway(string& str){
  8. if(str.empty())
  9. return 0;
  10. vector<int> dp(str.size()+1,0);
  11. dp[0]=1;
  12. for(auto i=1;i<=str.size();i++){
  13. if(str[i-1]!='0')
  14. dp[i]+=dp[i-1];
  15. if(i>=2&&str.substr(i-2,2)>="10"&&str.substr(i-2,2)<="26")
  16. dp[i]+=dp[i-2];
  17. }
  18. return dp.back();
  19. }
  20. };
  21. int main(int argc,char* argv[]){
  22. string str="1016";
  23. cout<<Solution().decodeway(str)<<endl;
  24. return 0;
  25. }

Go语言实现实现

  1. package main
  2. import (
  3. "fmt"
  4. "strconv"
  5. )
  6. func numDecodings(str string)int{
  7. if len(str)==0{
  8. return 0
  9. }
  10. dp:=make([]int,len(str)+1)
  11. dp[0]=1
  12. if str[:1]=="0"{
  13. dp[1]=0
  14. }else{
  15. dp[1]=1
  16. }
  17. for i:=2;i<=len(str);i++{
  18. lastNum,_:=strconv.Atoi(str[i-1:i])
  19. if lastNum>=1&&lastNum<=9{
  20. dp[i]+=dp[i-1]
  21. }
  22. lastNum,_=strconv.Atoi(str[i-2:i])
  23. if lastNum>=10&&lastNum<=26{
  24. dp[i]+=dp[i-2]
  25. }
  26. }
  27. return dp[len(str)]
  28. }
  29. func main(){
  30. fmt.Println("求编码的总数")
  31. str:="226"
  32. fmt.Println(numDecodings(str))
  33. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/67236
推荐阅读
相关标签
  

闽ICP备14008679号