File tree 1 file changed +28
-29
lines changed
Algorithms/0091.decode-ways
1 file changed +28
-29
lines changed Original file line number Diff line number Diff line change @@ -6,55 +6,54 @@ func numDecodings(s string) int {
6
6
return 0
7
7
}
8
8
9
- if n == 1 {
10
- return waysOfOne (s )
11
- }
12
-
13
9
dp := make ([]int , n + 1 )
14
- dp [0 ], dp [1 ] = 1 , waysOfOne (s [0 :1 ])
10
+ // dp[i] 表示 s[:i+1] 的组成方式数
11
+ dp [0 ], dp [1 ] = 1 , one (s [0 :1 ])
15
12
16
13
for i := 2 ; i <= n ; i ++ {
17
- w1 , w2 := waysOfOne (s [i - 1 :i ]), waysOfTwo (s [i - 2 :i ])
18
- switch {
19
- case w1 == 0 && w2 == 0 :
14
+ w1 , w2 := one (s [i - 1 :i ]), two (s [i - 2 :i ])
15
+ dp [i ] = dp [i - 1 ]* w1 + dp [i - 2 ]* w2
16
+ if dp [i ] == 0 {
17
+ // 子字符串 s[:i+1] 的组成方式数为 0
18
+ // 则,s 的组成方式数肯定也为 0
19
+ // 这时可以提前结束
20
20
return 0
21
- case w2 == 2 :
22
- dp [i ] = dp [i - 1 ] + dp [i - 2 ]
23
- case w1 == 0 : // w2 == 1
24
- dp [i ] = dp [i - 2 ]
25
- case w2 == 0 : // w1 == 1
26
- dp [i ] = dp [i - 1 ]
27
21
}
28
22
}
29
23
30
24
return dp [n ]
31
25
}
32
26
33
- func waysOfOne (s string ) int {
27
+ // 检查 s 是否为合格的单字符
28
+ // len(s) == 1
29
+ // 合格, 返回 1
30
+ // 不合格, 返回 0
31
+ // 注意:
32
+ // 题目保证了 s 只含有数字
33
+ func one (s string ) int {
34
34
if s == "0" {
35
35
return 0
36
36
}
37
37
return 1
38
38
}
39
39
40
- func waysOfTwo (s string ) int {
41
- switch {
42
- case '3' <= s [0 ] && s [0 ] <= '9' :
43
- return 0
44
- case s [0 ] == '2' :
40
+ // 检查 s 是否为合格的双字符
41
+ // len(s) == 2
42
+ // 合格, 返回 1
43
+ // 不合格, 返回 0
44
+ // 注意:
45
+ // 题目保证了 s 只含有数字
46
+ func two (s string ) int {
47
+ switch s [0 ] {
48
+ case '1' :
49
+ return 1
50
+ case '2' :
45
51
if s [1 ] == '7' || s [1 ] == '8' || s [1 ] == '9' {
46
52
return 0
47
53
}
48
- if s [1 ] == '0' {
49
- return 1
50
- }
51
- return 2
52
- case s [0 ] == '1' :
53
- if s [1 ] == '0' {
54
- return 1
55
- }
56
- return 2
54
+ return 1
57
55
default :
56
+ // '3' <= s[0] && s[0] <= '9',或
58
57
// s[0] == '0'
59
58
return 0
60
59
}
You can’t perform that action at this time.
0 commit comments