将数字解码为字母可能的解码方法,动态规划求解,faster than 98%
dp[i] = dp[i - 1] + dp[i - 1]
dp[i] = dp[i - 1]
dp[i] = dp[i - 2]
return 0
/**
* @param {string} s
* @return {number}
*/
var numDecodings = function(s) {
if (s.charAt(0) === '0') return 0
var dp = new Array(s.length)
dp[0] = 1
for (var i = 1; i < s.length; i++){
var prev = s.charAt(i) - '0'
var cur = s.charAt(i) - '0' + 10 * (s.charAt(i - 1) - '0')
if (prev !== 0 && cur >= 10 && cur <= 26) {
dp[i] = i === 1 ? (dp[i - 1] + 1) : (dp[i - 1] + dp [i - 2])
} else if(prev === 0 && cur >= 10 && cur <= 26) {
dp[i] = i === 1 ? 1 : dp[i - 2]
} else if(prev === 0 && (cur < 10 || cur > 26)) {
return 0
} else {
dp[i] = dp[i - 1]
}
}
return dp[s.length - 1]
};
网友评论