LeetCode Top Interview Questions 91. Decode Ways (Java版; Medium)
题目描述
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).
//状态压缩classSolution{publicintnumDecodings(String s){int n = s.length();if(n==0){return0;}//小心初始化int a=0,b=1,c=1;for(int i=1; i<=n; i++){if(s.charAt(i-1)!='0'){
a = b;}else{
a =0;}if(i-2>=0){int cur = Integer.valueOf(s.substring(i-2,i));if(cur>=10&& cur<=26){
a = a + c;}}//
c = b;
b = a;}return a;}}
classSolution{publicintnumDecodings(String s){int n = s.length();if(n==1)return s.charAt(0)=='0'?0:1;//初始化非常关键, 找好a,b,c和dp[i-2], dp[i-1], dp[i]的关系int a=1;//dp[i-2]int b=s.charAt(0)=='0'?0:1;//dp[i-1]int c=0;for(int i=2; i<=n; i++){int one = Integer.parseInt(s.substring(i-1, i));int two = Integer.parseInt(s.substring(i-2,i));if(one==0)
c =0;else
c = b;if(two>=10&& two<=26)
c = c + a;//update
a = b;
b = c;}return c;}}
和本题相似的问题:
62. Unique Paths
70. Climbing Stairs
509. Fibonacci Number
I used a dp array of size n + 1 to save subproblem solutions. dp[0] means an empty string will have one way to decode, dp[1] means the way to decode
a string of size 1. I then check one digit and two digit combination and save the results along the way. In the end, dp[n] will be the end result.
publicclassSolution{publicintnumDecodings(String s){if(s == null || s.length()==0){return0;}int n = s.length();int[] dp =newint[n+1];
dp[0]=1;
dp[1]= s.charAt(0)!='0'?1:0;for(int i =2; i <= n; i++){int first = Integer.valueOf(s.substring(i-1, i));int second = Integer.valueOf(s.substring(i-2, i));if(first >=1&& first <=9){
dp[i]+= dp[i-1];}if(second >=10&& second <=26){
dp[i]+= dp[i-2];}}return dp[n];}}
LeetCode Top Interview Questions 91. Decode Ways (Java版; Medium)
welcome to my blogLeetCode Top Interview Questions 91. Decode Ways (Java版; Medium)题目描述A message containing letters from A-Z is being encoded to numbers using the following mapping:'A' -> 1'B'...