题意
对给定的数字串编码成字母,不合法的输出0
题解
使用动态规划解决。满足nums[i - 1] * 10 + nums[i]时dp[i] = dp[i - 1] + dp[i - 2],否则dp[i] = dp[i - 1]
代码
public class Solution {
int result = 0;
public int numDecodings(String s) {
if(s.equals("") || s.charAt(0) == '0')
return 0;
int[] nums = new int[s.length()];
for(int i = 0; i < s.length(); i++)
nums[i] = s.charAt(i) - '0';
int[] dp = new int[nums.length];
dp[0] = nums[0] == 0 ? 0 : 1;
if(nums.length > 1)
{
if(nums[0] * 10 + nums[1] <= 26 && nums[1] != 0)
dp[1] = dp[0] + 1;
else if(nums[1] == 0 && (nums[0] > 2 || nums[0] == 0))
return 0;
else
dp[1] = dp[0];
}
for(int i = 2; i < nums.length; i++)
{
if(nums[i - 1] * 10 + nums[i] <= 26 && nums[i] != 0 && nums[i - 1] != 0)
dp[i] = dp[i - 1] + dp[i - 2];
else if(nums[i] == 0 && (nums[i - 1] > 2 || nums[i - 1] == 0))
return 0;
else if(nums[i] == 0)
dp[i] = dp[i - 2];
else
dp[i] = dp[i - 1];
}
return dp[nums.length - 1];
}
}