package com.interview.books.leetcodeoj; /** * Created_By: stefanie * Date: 14-12-23 * Time: 下午10:14 */ public class LOJ91_DecodeWays { //edge case: s.charAt(0) == '0' return 0; //state: ways[i]: is the decode ways of s.substring(0, i); //initialize: ways[0] = 1, ways[1] = 1; //function: cur = s.charAt(i - 1), pre = s.charAt(i - 2) // if(cur == '0') // if(pre == '0' || pre > '2') return 0; // else ways[i] = ways[i-2]; // else num = (pre - '0') * 10 + (cur - '0'); // if(num < 10 || num > 26) ways[i] = ways[i - 1]; // else ways[i] = ways[i-1] + ways[i-2]; //result: ways[s.length] public int numDecodings(String s) { if(s == null || s.length() == 0 || s.charAt(0) == '0') return 0; int[] ways = new int[3]; ways[0] = 1; ways[1] = 1; for(int i = 2; i <= s.length(); i++){ char cur = s.charAt(i - 1); char pre = s.charAt(i - 2); if(cur == '0'){ if(pre == '0' || pre > '2') return 0; else ways[i % 3] = ways[(i-2)%3]; } else { int num = (pre - '0') * 10 + (cur - '0'); if(num < 10 || num > 26) ways[i%3] = ways[(i-1)%3]; else ways[i%3] = ways[(i-1)%3] + ways[(i-2)%3]; } } return ways[s.length()%3]; } }