zoukankan      html  css  js  c++  java
  • LeetCode -- Decode Ways

    题目描写叙述:
    A message containing letters from A-Z is being encoded to numbers using the following mapping:


    'A' -> 1
    'B' -> 2
    ...
    'Z' -> 26


    Given encoded message "12", it could be decoded as "AB" (1 2) or "L" (12).
    The number of ways decoding "12" is 2.


    就是给定1个由数字组成的字符串。依照相应关系(1-A,2-B...)完毕解码,共同拥有多少种解码方式。
    1. 确定问题范围,也就是s中每个字符s[i]的取值范围
    -s[0]不能为0或大于2
    -s中不能连续出现两个0


    2. 找规律
    在满足取值范围的情况下,设a[i]为s中第i个字符的解码可能数,当中i∈[0,n)
    a[0] = 1;
    a[1] = s[1] != 0 时为  2 否则为 1;
    a[2] : 
    s[2] 不为0时 a[2] += a[1] 。 
    s[0]和s[1]能够组成10-26中的一个数时 a[2] += a[0]


    因此,对于a[n]。  
    s[n] != 0 时 ,a[n] += a[n-1] ; 
    s[n-1]与s[n]可组成10-26 时。 a[n] += a[n-2];


    对于长度为n的字符串,最后解为a[n-1].


    实现代码:



    public class Solution {
     public int NumDecodings(string s) 
     {
         if(string.IsNullOrWhiteSpace(s)){
    	 	return 0;
    	 }
    	 
    	 if(s.Length == 1){
    	 	return s == "0" ? 0 : 1;
    	 }
    	 if(s[0] == '0' || s[0] >= '3'&& s[1] == '0'){
    	 	return 0;
    	 }
    	 
    	 if(s.Length == 2){
    	 	return s[1] == '0' || !ok(s[0],s[1]) ? 1 : 2;
    	 }
    	 
    	 var arr = new int[s.Length];
    	 arr[0] = 1;
    	  arr[1] = s[1] == '0' || !ok(s[0], s[1]) ? 1 : 2;
    	 
    	 for(var i = 2;i < s.Length; i++){
    	 	if(s[i-1] == '0' && s[i] == '0'){
    			return 0;
    		}
    		
    	 	if(s[i] != '0'){
    			arr[i] += arr[i-1];
    		}
    		if(ok(s[i-1], s[i])){
    			arr[i] += arr[i-2];
    		}
    	 }
    	 
    	 return arr[s.Length-1];
     }
     
     private bool ok(char c1 , char c2){
     if(c1 == '0'){
     return false;
     }
     if (c1 == '1' || c1 == '2' && c2 <= '6'){
     return true;
     }
     return false;
     }
    }


  • 相关阅读:
    FHQ Treap(无旋 Treap)详解
    [CSP-S 2021] 廊桥分配 题解
    Splay Tree(伸展树)详解
    爬虫工程师也应该会的 NodeJS 知识(一)
    网站加密和混淆技术总结
    ip地址
    索引
    go try。。。catch
    python常见问题
    python实现发布订阅
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6851562.html
Copyright © 2011-2022 走看看