A message containing letters from A-Z is being encoded to numbers using the following mapping:
‘A’ -> 1
‘B’ -> 2
…
‘Z’ -> 26
Given a non-empty string containing only digits, determine the total number of ways to decode it.
- Example 1:
Input: “12”
Output: 2
Explanation: It could be decoded as “AB” (1 2) or “L” (12). - Example 2:
Input: “226”
Output: 3
Explanation: It could be decoded as “BZ” (2 26), “VF” (22 6), or “BBF” (2 2 6).
解法——动态规划
用dp[i]保存有多少种组合方式
public int numDecodings(String s) {
if(s.length()==0||(s.length()==1&&s.charAt(0)=='0'))
return 0;
if(s.length()==1)
return 1;
int[] dp=new int[s.length()+1];
dp[0]=1;
for(int i=0;i<s.length();i++)
{
dp[i+1]=s.charAt(i)=='0'?0:dp[i];
if(i>0&&(s.charAt(i-1)=='1'||(s.charAt(i-1)=='2'&&s.charAt(i)<='6'))){
dp[i+1]+=dp[i-1];
}
}
return dp[s.length()];
}
Runtime: 1 ms, faster than 83.92% of Java online submissions for Decode Ways.
Memory Usage: 35.9 MB, less than 61.71% of Java online submissions for Decode Ways.