动态规划

把数字翻译成字符串

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];
    }
}
全部评论

相关推荐

04-29 22:35
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务