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 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.


    解题思路:

    典型的dynamic programming

    判断dp[i-1] , dp[i-2] 是否有效

    recurrence formula: dp[i] += dp[i-1] if(s(i-1, i) is valid (1-9))  + dp[i-2] (if s(i-2, i)) is valid( 10-26))

    base case: dp[0] =1, dp[1] = 1(s(0) is valid) or 0 (s(0) is not valid)


    Java code:

    public class Solution {
        public int numDecodings(String s) {
            if(s == null || s.length() == 0 || s.equals("0")){
                return 0;
            }
            int[] dp = new int[s.length()+1];
            //base case: dp[0] dp[1]
            dp[0] = 1;
            if(isValid(s.substring(0,1))){
                dp[1] = 1;
            }else {
                dp[1] = 0;
            }
            for(int i = 2; i<= s.length(); i++){
                if(isValid(s.substring(i-1, i))){
                    dp[i] += dp[i-1];
                }
                if(isValid(s.substring(i-2,i))){
                    dp[i] += dp[i-2];
                }
            }
            return dp[s.length()];
        }
        
        public boolean isValid(String s){
            if(s.charAt(0) == '0') {
                return false;
            }
            int value = Integer.parseInt(s); // Integer.parseInt: translate string to int
            return value >=1 && value <= 26;
        }
    }

    Reference:

    1. http://www.programcreek.com/2014/06/leetcode-decode-ways-java/

    2. http://www.cnblogs.com/springfor/p/3896162.html

  • 相关阅读:
    windows下面Nginx日志切割
    C#通过DocX创建word
    leetcode 189 Rotate Array
    leetcode 172 Factorial Trailing Zeroes
    leetcode 169 Majority Element 冰山查询
    leetcode 165 Compare Version Numbers
    leetcode 160 Intersection of Two Linked Lists
    【windows-》linux】SCP
    【设计】B端和C端区别
    【Flask】部署
  • 原文地址:https://www.cnblogs.com/anne-vista/p/4963741.html
Copyright © 2011-2022 走看看