动态规划——Decode Ways[LeetCode]

来源:互联网 发布:手机怎么查看淘宝积分 编辑:程序博客网 时间:2024/06/06 06:31


题目链接:https://leetcode.com/problems/decode-ways/description/

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.

参考链接:http://blog.csdn.net/linhuanmars/article/details/24570759

dp[i]表示字符串数组前i个字符(即arr[0...i-1])解码方法数;下面代码for循环是以当arr[i]考虑的,它对应的结果为dp[i+1]

public int numDecodings(String s){if(s==null||s.length()==0 || s.charAt(0)=='0')return 0;int[] dp=new int[s.length()+1];dp[0]=1;char[] str=s.toCharArray();if(str[0]=='0')dp[1]=0;elsedp[1]=1;for(int i=1;i<s.length();i++){ if(str[i]=='0'){ //当前字符为0if(str[i-1]=='1'||str[i-1]=='2') //上一个字符为1或2dp[i+1]=dp[i-1];elsedp[i+1]=0;}else{ //当前字符不是0if(str[i-1]=='0'||str[i-1]>='3') //上一个字符为0或3dp[i+1]=dp[i];else if(str[i-1]=='2'&&str[i]>='7'&&str[i]<='9') dp[i+1]=dp[i];else{dp[i+1]=dp[i]+dp[i-1];}}}return dp[s.length()];}


原创粉丝点击