剑指 Offer 46. 把数字翻译成字符串

package leetcode;


public class offer_46 {
    public int translateNum(int num) {
        //爬楼梯问题,每次截取两个数字相当于爬两层,需要判断是否能够爬两层
        String str=String.valueOf(num);
        int dp[]=new int[str.length()];
        dp[0]=1;
        if(dp.length>1) {
            if(Integer.valueOf(str.substring(0,2))<26) {
                dp[1]=2;
            }else {
                dp[1]=1;
            }
            for(int i=2;i<str.length();i++) {
                //截取当前字符和之前一个字符作为子串
                String s=str.substring(i-1,i+1);
                //数字超过25不能爬两层
                if(Integer.valueOf(s)<26&&!s.startsWith("0")) {
                    dp[i]=dp[i-1]+dp[i-2];
                }else {
                    dp[i]=dp[i-1];
                }
            }
        }
        return dp[str.length()-1];
    }
    
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        offer_46 off=new offer_46();
        System.out.println(off.translateNum(506));
    }

}

 

posted on 2022-03-11 15:29  一仟零一夜丶  阅读(28)  评论(0)    收藏  举报