wayetan
2/21/2014 - 8:09 AM

Decode Ways

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 "12", it could be decoded as "AB" (1 2) or "L" (12).
 * The number of ways decoding "12" is 2.
 */

public Solution {
    public int numDecodings(String s) {
        if(s == null || s.length() == 0) {
            return 0;
        }
    	int n = s.length();
        int[] ans = new int[n + 1];
        ans[0] = 1; // empty string
        ans[1] = s.charAt(0) != '0' ? 1: 0;
        for(int i = 2; i <= n; i++) {
        	int oneDigit = Integer.valueOf(s.substring(i - 1, i));
        	int twoDigits = Integer.valueOf(s.substring(i - 2, i));
        	if(oneDigit != 0 ) {
        		ans[i] += ans[i - 1];
        	}
        	if(twoDigits >= 10 && twoDigits <= 26) {
        		ans[i] += ans[i - 2];
        	}
        }
        return ans[n];
    }
}