• 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];
        }
    }
  • 相关阅读:
    __file__ 作用以及模块导入方法
    random 模块
    time 模块
    module模块和包
    装饰器
    python闭包
    filter map reduce函数的使用
    python文件处理
    python内置函数使用
    函数
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14217077.html
Copyright © 2020-2023  润新知