Decode Ways

来源:互联网 发布:社交软件下载 编辑:程序博客网 时间:2024/06/08 09:45

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.

For example,
Given encoded message "12", it could be decoded as "AB" (1 2) or "L" (12).

The number of ways decoding "12" is 2.

典型的动态管理题目 但是这里需要考虑的特殊情况1 第i位为0 第i-1位也为0   2.第i位为0 第i-1位大于2  根据情况来确定动态转移方程 代码如下:

public class Solution {    public int numDecodings(String s) {      if (s.length() == 0)return 0;int[] res = new int[s.length()];if (s.charAt(0) <= '0' || s.charAt(0) > '9') {return 0;} else {res[0] = 1;}if (s.length() == 1)return res[0];if (s.charAt(0) < '2') {if (s.charAt(1) == '0') {res[1] = 1;} else {if (s.charAt(1) < '0') {return 0;} else {res[1] = 2;}}} else {if (s.charAt(0) == '2') {if (s.charAt(1) <= '6')if(s.charAt(1)=='0'){    res[1]=1;   }else{res[1] = 2;}else {res[1] = 1;}} else {if (s.charAt(1) == '0')return 0;else {res[1] = 1;}}}for (int i = 2; i < s.length(); i++) {if (s.charAt(i - 1) < '2') {if (s.charAt(i - 1) == '0') {if (s.charAt(i) == '0') {return 0;} else {res[i] = res[i - 2];}} else {if (s.charAt(i) < '0') {return 0;} else {if (s.charAt(i) == '0') {res[i] = res[i - 2];} else {res[i] = res[i - 2] + res[i - 1];}}}} else {if (s.charAt(i - 1) == '2') {if (s.charAt(i) <= '6') {if (s.charAt(i) == '0') {res[i] = res[i - 2];} else {res[i] = res[i - 2] + res[i - 1];}} else {res[i] = res[i - 1];}} else {if (s.charAt(i) == '0')return 0;elseres[i] = res[i - 1];}}}return res[s.length() - 1];    }}


0 0
原创粉丝点击