leetcode 91. Decode Ways

来源:互联网 发布:ubuntu 脚本是啥 编辑:程序博客网 时间:2024/05/20 04:46

题意

对给定的数字串编码成字母,不合法的输出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];    }}
0 0