Skip to content

Commit 52b958d

Browse files
committed
📝 add lc 91
1 parent ffcde5c commit 52b958d

3 files changed

Lines changed: 119 additions & 0 deletions

File tree

Java/alg/.DS_Store

0 Bytes
Binary file not shown.

Java/alg/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@
130130
- [82.删除排序链表中的重复元素2](lc/82.删除排序链表中的重复元素2.md)
131131
- [86.分隔链表](lc/86.分隔链表.md)
132132
- [90.子集2](lc/90.子集2.md)
133+
- [91.解码方法](lc/91. 解码方法.md)
133134

134135
## 笔试
135136

Java/alg/lc/91.解码方法.md

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
# 91. 解码方法
2+
3+
[url](https://leetcode-cn.com/problems/decode-ways/)
4+
5+
## 题目
6+
7+
一条包含字母 `A-Z` 的消息通过以下映射进行了 **编码**
8+
9+
10+
```
11+
'A' -> 1
12+
'B' -> 2
13+
...
14+
'Z' -> 26
15+
```
16+
17+
要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"111" 可以将 "1" 中的每个 "1" 映射为 "A" ,从而得到 "AAA" ,或者可以将 "11" 和 "1"(分别为 "K" 和 "A" )映射为 "KA" 。注意,"06" 不能映射为 "F" ,因为 "6" 和 "06" 不同。
18+
19+
给你一个只含数字的 非空 字符串 num ,请计算并返回 解码 方法的 总数 。
20+
21+
题目数据保证答案肯定是一个 32 位 的整数。
22+
23+
```
24+
输入:s = "12"
25+
输出:2
26+
解释:它可以解码为 "AB"(1 2)或者 "L"(12)。
27+
输入:s = "226"
28+
输出:3
29+
解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。
30+
```
31+
32+
## 方法
33+
34+
35+
## code
36+
37+
### js
38+
39+
```js
40+
let numDecodings = s => {
41+
if (s === null || s.length === 0)
42+
return 0;
43+
let n = s.length;
44+
let dp = Array(n + 1).fill(0);
45+
dp[0] = 1;
46+
dp[1] = s[0] === '0' ? 0 : 1;
47+
for (let i = 2; i <= n; i++) {
48+
let one = parseInt(s.slice(i-1, i));
49+
if (one !== 0)
50+
dp[i] += dp[i-1];
51+
if (s[i-2] === '0')
52+
continue;
53+
let two = parseInt(s.slice(i-2, i));
54+
if (two <= 26)
55+
dp[i] += dp[i-2];
56+
}
57+
return dp[n];
58+
}
59+
```
60+
61+
### go
62+
63+
```go
64+
func numDecodings(s string) int {
65+
if len(s) == 0 {
66+
return 0
67+
}
68+
n := len(s)
69+
dp := make([]int, n+1)
70+
dp[0] = 1
71+
if s[0] == '0' {
72+
dp[1] = 0
73+
} else {
74+
dp[1] = 1
75+
}
76+
for i := 2; i <= n; i++ {
77+
one, _ := strconv.Atoi(s[i-1:i])
78+
if one != 0 {
79+
dp[i] += dp[i-1]
80+
}
81+
if s[i-2] == '0' {
82+
continue
83+
}
84+
two, _ := strconv.Atoi(s[i-1:i])
85+
if two <= 26 {
86+
dp[i] += dp[i-2]
87+
}
88+
}
89+
return dp[n]
90+
}
91+
```
92+
93+
### java
94+
95+
```java
96+
class Solution {
97+
public int numDecodings(String s) {
98+
if (s == null || s.length() == 0)
99+
return 0;
100+
int n = s.length();
101+
int[] dp = new int[n + 1];
102+
dp[0] = 1;
103+
dp[1] = s.charAt(0) == '0' ? 0 : 1;
104+
for (int i = 2; i <= n; i++) {
105+
int one = Integer.valueOf(s.substring(i - 1, i));
106+
if (one != 0)
107+
dp[i] += dp[i - 1];
108+
if (s.charAt(i - 2) == '0')
109+
continue;
110+
int two = Integer.valueOf(s.substring(i - 2, i));
111+
if (two <= 26)
112+
dp[i] += dp[i - 2];
113+
}
114+
return dp[n];
115+
}
116+
}
117+
```
118+

0 commit comments

Comments
 (0)