0
点赞
收藏
分享

微信扫一扫

Leetcode_剑指Offer46_把数字翻译成字符串_dp

海滨公园 2022-03-11 阅读 37

很容易观察到是一道动态规划

class Solution {
    public int translateNum(int num) {
        String s = String.valueOf(num);
        int len = s.length();
        int[] dp = new int[len];
        dp[0] = 1;
        for(int i = 1;i < len ;i ++) {
            dp[i] = dp[i - 1];
            if(s.charAt(i - 1) != '0' && Integer.parseInt(s.substring(i - 1, i + 1)) <= 25) {
                dp[i] += i >= 2 ?dp[i - 2] : 1;
            }
        }
        return dp[len - 1];
    }
}

可以观察到,dp[i]只与dp[i-1]和dp[i-2]有关,所以空间可以优化到O1

class Solution {
    public int translateNum(int num) {
        String s = String.valueOf(num);
        int len = s.length();
        int now = 1;
        int bef = 1;
        int befbef = 1;
        for(int i = 1;i < len ;i ++) {
            if(s.charAt(i - 1) != '0' && Integer.parseInt(s.substring(i - 1, i + 1)) <= 25) {
                now += befbef;
            }
            befbef = bef;
            bef = now;
        }
        return now;
    }
}
举报

相关推荐

0 条评论