您的位置:首页 > 其它

LeetCode - Decode Ways

2016-01-04 11:19 267 查看
题目:

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. 当前字符为0

1.1 前一个字符为0,3-9.

1.2 前一个字符为1,2

2. 当前字符非0

2.1 前一个字符为0,3-9

2.2 前一个字符为2,当前字符为7-9

2.3 余下情况

package dp;

public class DecodeWays {

public int numDecodings(String s) {
int n;
if (s == null || (n = s.length()) == 0) return 0;
int[] dp = new int[n + 1];
dp[0] = 1;
if (s.charAt(0) == '0') return 0;
dp[1] = 1;
for (int i = 2; i <= n; ++i) {
if (s.charAt(i - 1) == '0') {
if (s.charAt(i - 2) != '1' && s.charAt(i - 2) != '2') return 0;
dp[i] = dp[i - 2];
} else if (s.charAt(i - 2) == '0' || s.charAt(i - 2) > '2' ||
(s.charAt(i - 2) == '2' && s.charAt(i - 1) > '6')) {
dp[i] = dp[i - 1];
} else {
dp[i] = dp[i - 1] + dp[i - 2];
}
}
return dp
;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
DecodeWays d = new DecodeWays();
System.out.println(d.numDecodings("10") == 1);
System.out.println(d.numDecodings("101") == 1);
System.out.println(d.numDecodings("1001") == 0);
System.out.println(d.numDecodings("10012") == 0);
System.out.println(d.numDecodings("0012") == 0);
System.out.println(d.numDecodings("12") == 2);
System.out.println(d.numDecodings("128") == 2);
System.out.println(d.numDecodings("27") == 1);
System.out.println(d.numDecodings("99") == 1);
}

}


更简化一下:

package dp;

public class DecodeWays {

public int numDecodings(String s) {
int n;
if (s == null || (n = s.length()) == 0) return 0;
int[] dp = new int[n + 1];
dp[0] = 1;
if (s.charAt(0) == '0') return 0;
dp[1] = 1;

for (int i = 2; i <= n; ++i) {
int c1 = 0;
if (s.charAt(i - 1) != '0')
c1 = dp[i - 1];
int c2 = 0;
if (s.charAt(i - 2) == '1' || (s.charAt(i - 2) == '2' && s.charAt(i - 1) < '7'))
c2 = dp[i - 2];
dp[i] = c1 + c2;
}

return dp
;
}

public static void main(String[] args) {
// TODO Auto-generated method stub
DecodeWays d = new DecodeWays();
System.out.println(d.numDecodings("10") == 1);
System.out.println(d.numDecodings("101") == 1);
System.out.println(d.numDecodings("1001") == 0);
System.out.println(d.numDecodings("10012") == 0);
System.out.println(d.numDecodings("0012") == 0);
System.out.println(d.numDecodings("12") == 2);
System.out.println(d.numDecodings("128") == 2);
System.out.println(d.numDecodings("27") == 1);
System.out.println(d.numDecodings("99") == 1);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: