medium
https://leetcode.com/problems/decode-ways/
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
Given encoded message
"12", it could be decoded as "AB" (1 2) or "L" (12).
The number of ways decoding
"12" is 2.思路: use dp to add through string. Prefill dp[0] 1. For current char,
1 - If cur.val != 0, dp[i+1](cur) = dp[i](pre) - inherit last char (we treat cur as one letter)
2 - If cur.val + pre.val * 10 in [10,26], dp[i+1] += dp[i-1] - add 2nd last char(we treat cur&last as one letter)
Complexity: Time O(n) Space O(n)
//invalid case: 001, 1001 ..., return 0 public int numDecodings(String s) { if(s.length() == 0||s.charAt(0) == '0') return 0; int[] dp = new int[s.length() + 1];//need prefill 2 val in dp dp[0] = 1;//default val dp[1] = 1;//filled by 1st char in s for(int i = 1; i < s.length(); i++){ int pre = s.charAt(i-1) - '0'; int cur = s.charAt(i) - '0'; if(cur != 0){//no char for single 0 dp[i+1] = dp[i]; } int sum = pre*10 + cur; if(sum >= 10 && sum <=26){//eg:01 not valid, only bt [10,26] dp[i+1] += dp[i-1]; } } return dp[dp.length - 1]; }
/*125 127 ABE ABG LE LG AY ---------- 3 2 */
No comments:
Post a Comment