码迷,mamicode.com
首页 > 其他好文 > 详细

91. Decode Ways

时间:2016-05-16 01:52:18      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

    /*
     * 91. Decode Ways
     * 12.20 by Mingyang
     * 题意解析:给你一串数字,解码成英文字母。
     * 类似爬楼梯问题,但要加很多限制条件。
     * 定义数组number,number[i]意味着:字符串s[0..i-1]可以有number[i]种解码方法。
     * 回想爬楼梯问题一样,number[i] = number[i-1] + number[i-2]
     * 但不同的是本题有多种限制:
     * 第一: s[i-1]不能是0,如果s[i-1]是0的话,number[i]就只能等于number[i-2]---末尾数字不能为0
     * 比如说110的数量和1是一样的(少两个)
     * 第二,s[i-2,i-1]中的第一个字符不能是0,而且Integer.parseInt(s.substring(i-2,i))获得的整数必须在0到26之间。
     * 后两位数字第一位不为0
     */
    public int numDecodings(String s) {  
        if(s==null || s.length()==0) {  
            return 0;  
        }  
        if(s.charAt(0)==‘0‘) {  
            return 0;  
        }          
        int [] number = new int[s.length() + 1];  
        number[0] = 1;  
        number[1] = 1;  
        int tmp;  
        for(int i=2;i<=s.length();i++) {  
            //检查当前字符是不是‘0‘  
            tmp = Integer.parseInt(s.substring(i-1,i));  
            if(tmp!=0) {              
                number[i] = number[i-1];  
            }  
            //检查当前字符和前一个字符组合在一起是否在1-26之间  
            if(s.charAt(i-2)!=‘0‘) {  
                tmp = Integer.parseInt(s.substring(i-2,i));  
                if(tmp>0&&tmp<=26) {  
                    number[i] += number[i-2];  
                }  
            }  
        }  
        return number[s.length()];  
    }  

 

91. Decode Ways

标签:

原文地址:http://www.cnblogs.com/zmyvszk/p/5496796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!