LeetCode 91.Decode Ways【Java】
程序员文章站
2022-07-05 14:26:17
...
题目描述
AC代码
/*
分类:动态规划
1.我们用数组f[i]表示前i个数字编码得到的字符串的数量,
2.f[i]的计算有两种情况:
最后一个字母是一个数:f[i-1]
最后一个字母是两个数:f[i-2]
3.在判断最后一个字母是两个数的时候,首先要计算一下asciⅡ是不是在[10,26]之间,但是不要忘记只有i>=2时才可能存在
一个字母可能是两个数。
*/
class Solution {
public int numDecodings(String s) {
int n=s.length();
int[] f=new int[n+1];
f[0]=1;
for(int i=1;i<=n;i++){
if(s.charAt(i-1)!='0')
f[i]+=f[i-1];
if(i>=2){
int val=10*(s.charAt(i-2)-'0')+s.charAt(i-1)-'0';
if(10<=val&&val<=26)
f[i]+=f[i-2];
}
}
return f[n];
}
}
推荐阅读
-
leetcode.字符串.344反转字符串-Java
-
DFS和BFS讲解及Leetcode刷题小结(1)(JAVA)
-
【每日一道算法题】Leetcode之longest-increasing-path-in-a-matrix矩阵中的最长递增路径问题 Java dfs+记忆化
-
[Leetcode][第410题][JAVA][分割数组的最大值][动态规划][二分]
-
LeetCode 151. 翻转字符串里的单词(java代码和思路分析,模拟题)
-
LeetCode 热题 HOT 100 Java题解——148. 排序链表
-
Java,LeetCode 21. 合并两个有序链表
-
如何在Intellij中安装LeetCode刷题插件方便Java刷题
-
Leetcode 2. Add Two Numbers (java)
-
荐 LeetCode股票问题总结java