您的位置:首页 > 其它

91. Decode Ways

2018-03-13 10:42 232 查看

题目

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.

思路

本题题目和爬梯子很相似(每次只能爬一级或两级),这是个很典型的动态规划问题。我们维护一个数组dp[i]表示从索引i开始的字符串,转码的种类。那么我们可以写出状态转移方程:

dp[i] = Integer..parseInt(s.substring(i,i+2))<=26?dp[i+1]+dp[i+2]:dp[i+1]


代码

class Solution {
public int numDecodings(String s) {
int n = s.length();
if(n==0)
return 0;
int[] nums = new int[n+1];
nums
= 1;
nums[n-1] = s.charAt(n-1)=='0'?0:1;
for(int i=n-2;i>=0;i--)
{
if(s.charAt(i)=='0') continue;
nums[i] = Integer.parseInt(s.substring(i,i+2))<=26?nums[i+1]+nums[i+2]:nums[i+1];
}
return nums[0];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode array