zoukankan      html  css  js  c++  java
  • LeetCode91. 解码方法

    ☆☆☆思路:本题可以看成约束版的“爬楼梯问题”,即约束版的 f(n) = f(n-1) + f(n-2) 问题。

         注意点1:由于 i 取 1 时,dp[len-2]取不到,所以要有n+1个。len-2决定了 dp[i] 应定义为 字符个数为i的方法总数。

         注意点2:对于dp[0]的初值,举例如"12",则dp[0]初值应为1.

    class Solution {
        public int numDecodings(String s) {
            int len = s.length();
            if (len == 0 || s.charAt(0) == '0') {
                return 0;
            }
            // dp[i] 表示 字符个数为i的方法总数
            int[] dp = new int[s.length() + 1];
            dp[0] = 1;
            dp[1] = 1;
            for (int i = 1; i < len; i++) {
                // 如果i-1位 与 i位 能组成10~26之间的数
                if (s.charAt(i-1) == '1' || (s.charAt(i-1) == '2' && s.charAt(i) <= '6')) {
                    if (s.charAt(i) == '0') {
                        dp[i+1] = dp[i-1];  //如果是20、10
                    }else {
                        dp[i+1] = dp[i] + dp[i-1]; // 如果是11-19、21-26
                    }
                }else if (s.charAt(i) == '0') {
                    return 0;  //如果是30、40、50
                }else {
                    dp[i+1] = dp[i];  //i-1和i无法构成一个字母
                }
            }
            return dp[len];
        }
    }
  • 相关阅读:
    ansible-handlers
    LNMP
    编译安装sshpass
    cadence-irun(xrun) 增量编译
    sva 基础语法
    bsub && lsf 介绍
    Perl 输出内容到 excel
    Perl sendmail
    dlopen与dlsym用法
    perl在linux下通过date获取当前时间
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14217077.html
Copyright © 2011-2022 走看看