动态规划
把数字翻译成字符串
http://www.nowcoder.com/questionTerminal/046a55e6cd274cffb88fc32dba695668
首先定义状态dp【i】为前i个字符有多少种结果,那么状态转移方程有(注意前导零的影响,比如"01"是非法的,无法转换成'a'。):
当str【i】== '0' ,如果"10" <= str【i - 1】str【i】 <= "26" :dp【i】 = dp【i - 1】
当str【i】!= '0',如果"10" <= str【i - 1】str【i】 <= "26" : dp【i】 = dp【i - 1】 + dp【i - 2】,否则dp【i】 = dp【i - 1】。
import java.util.*; public class Solution { /** * 解码 * @param nums string字符串 数字串 * @return int整型 */ public int solve (String nums) { // write code here int len = nums.length(); char[] chs = nums.toCharArray(); int[] dp = new int[len + 1]; if(chs[0] > '0'){ dp[1] = 1; } dp[0] = 1; for(int i = 1; i < len; i++){ int t1 = chs[i - 1] - '0'; int t2 = chs[i] - '0'; int tmp = t1 * 10 + t2; if(t2 > 0) dp[i + 1] = dp[i]; if(tmp <= 26 && tmp >=10){ dp[i + 1] = dp[i - 1] + dp[i + 1]; } } return dp[len]; } }