动态规划
把数字翻译成字符串
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];
}
}
