题目
- 描述
有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。
现在给一串数字,返回有多少种可能的译码结果 - 输入实例
输入:“12”
返回值:2
说明:
2种可能的译码结果(”ab” 或”l”)
分析
- 一般情况
对于第i个位置的可能,它可能和前一个字符组成一个合法的字母;也可能不能和前一个组成;
如果能够和前一个组成:那么dp[i] = dp[i-2] + dp[i-1] 这两种可能;
如果不能和前一个组成合法字母: 那么就单独为一个字母,可能性等于前一个dp[i-1] - 特殊情况
由于最小的为1,最大为26, 所以0 是一个特殊的字符。
如果一个数为0,需要看它前一位是1或者2,否则直接是无效的编码,返回0;
代码实现
import java.util.*;
public class Solution {
/**
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
public int solve (String nums) {
// write code h