您的位置:首页 > 其它

Leetcode Decode Ways

2015-11-14 04:37 399 查看
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.

解题思路:

典型的dynamic programming

判断dp[i-1] , dp[i-2] 是否有效

recurrence formula: dp[i] += dp[i-1] if(s(i-1, i) is valid (1-9)) + dp[i-2] (if s(i-2, i)) is valid( 10-26))

base case: dp[0] =1, dp[1] = 1(s(0) is valid) or 0 (s(0) is not valid)

Java code:

public class Solution {
public int numDecodings(String s) {
if(s == null || s.length() == 0 || s.equals("0")){
return 0;
}
int[] dp = new int[s.length()+1];
//base case: dp[0] dp[1]
dp[0] = 1;
if(isValid(s.substring(0,1))){
dp[1] = 1;
}else {
dp[1] = 0;
}
for(int i = 2; i<= s.length(); i++){
if(isValid(s.substring(i-1, i))){
dp[i] += dp[i-1];
}
if(isValid(s.substring(i-2,i))){
dp[i] += dp[i-2];
}
}
return dp[s.length()];
}

public boolean isValid(String s){
if(s.charAt(0) == '0') {
return false;
}
int value = Integer.parseInt(s); // Integer.parseInt: translate string to int
return value >=1 && value <= 26;
}
}


Reference:

1. http://www.programcreek.com/2014/06/leetcode-decode-ways-java/
2. http://www.cnblogs.com/springfor/p/3896162.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: