Decode Ways --lintcode

来源:互联网 发布:怪物猎人ol mac 编辑:程序博客网 时间:2024/06/10 20:29

Description

A message containing letters from A-Z is being encoded to numbers using the following mapping:

‘A’ -> 1
‘B’ -> 2

‘Z’ -> 26
Given an encoded message containing digits, determine the total number of ways to decode it.

Example

Given encoded message 12, it could be decoded as AB (1 2) or L (12).
The number of ways decoding 12 is 2.

我的思路:这个有点像爬楼梯。要么’走一步’ 要么’走两步’. 即temp[i]=temp[i-1]+temp[i-2];
但是这个比爬楼梯多了一些限制条件。
1.s[i-1]不能为0,如果s[i-1]是0的话,number[i]就只能等于number[i-2]
2.s[i-2,i-1]中的第一个字符不能是0,而且Integer.parseInt(s.substring(i-2,i))形成的数字不能大于26.

public int numDecodings(String s) {    if(s==null || s.length()==0) {              return 0;          }          if(s.charAt(0)=='0') {              return 0;          }          int [] temp = new int[s.length() + 1];          temp[0] = 1;          temp[1] = 1;         int tmp;        for(int i=2;i<=s.length();i++){        //检查当前字符是不是'0'             if(Integer.parseInt(s.substring(i-1,i))!=0)                temp[i]=temp[i-1];            //检查当前字符和前一个字符组合在一起是否在1-26之间              if(s.charAt(i-2)!='0'){                tmp = Integer.parseInt(s.substring(i-2,i));                  if(tmp>0&&tmp<=26) {                      temp[i] += temp[i-2];                  }              }        }         return temp[s.length()];}