๐ŸŒ— 91. ่งฃ็ ๆ–นๆณ•

ๅžไฝ›็ซฅๅญ2022ๅนด10ๆœˆ10ๆ—ฅ
  • algorithm
  • dp
ๅฐไบŽ 1 ๅˆ†้’Ÿ

๐ŸŒ— 91. ่งฃ็ ๆ–นๆณ•

้šพๅบฆ: ๐ŸŒ—

้—ฎ้ข˜ๆ่ฟฐ

img_12.png


่งฃๆณ•

class Solution {
    public int numDecodings(String s) {
        // ๆ€่ทฏ๏ผš
        // dp
        int len = s.length();
        int[] dp = new int[len + 1];
        dp[0] = 1;
        for(int i = 1; i <= len; i ++) {
            int m = i - 1;
            if(isValid(s, m, m)) {
                dp[i] += dp[i - 1]; // ๅ•็‹ฌๆˆ่ฏ
            }
            if(isValid(s, m - 1, m)) {
                dp[i] += dp[i - 2]; // ๅ’Œๅ‰้ข็š„ๅ•่ฏๆˆ่ฏ
            }
        }
        return dp[len];
    }

    private boolean isValid(String s, int left, int right) {
        int len = s.length();
        if(left < 0 || right >= len) {
            return false;
        }
        char high = s.charAt(left);
        char low = s.charAt(right);
        if(high == '1' && (low >= '0' && low <= '9')) {
            return true;
        }
        if(high == '2' && (low >= '0' && low <= '6')) {
            return true;
        }
        if(left == right && high >= '1' && high <= '9') {
            return true;
        }
        return false;
    }
}

่พ“ๅ‡บ

img_11.png

ไธŠๆฌก็ผ–่พ‘ไบŽ: 2022/10/10 ไธ‹ๅˆ8:43:48
่ดก็Œฎ่€…: liuxianzhishou