场景
想要表达的是
在s[i-1] == '1' 或者 s[i-1] == '2的情况下,并且 '0' < s[i] < '7'
写出如下判断语句
if '0' < s[i] < '7' and s[i-1] == '1' or s[i-1] == '2':
问题所在
但是这个or会将条件切分成两部分
一部分是
'0' < s[i] < '7' and s[i-1] == '1'
另一部分是
s[i-1] == '2
彻底改变了原来的意思
解决方法
所以应该加上括号
if '0' < s[i] < '7' and (s[i-1] == '1' or s[i-1] == '2'):
代码
def numDecodings(self, s: str) -> int:
if s is None or len(s) == 0 or s[0] == '0':
return 0
dp = [0 for i in range(len(s) + 1)]
dp[0] = 1
dp[1] = 1
for i in range(1, len(s)):
if s[i] == '0':
if s[i-1] == '1' or s[i-1] == '2':
dp[i+1] = dp[i-1]
else:
return 0
else:
## 出现问题的代码
if '0' < s[i] < '7' and (s[i-1] == '1' or s[i-1] == '2'):
dp[i+1] = dp[i] + dp[i-1]
else:
dp[i+1] = dp[i]
return dp[len(s)]
总结
- 这都是些小问题,但是就是这样的小问题才折磨人,所谓细节是魔鬼
- 写条件的时候如果不确定他的执行顺序,一定要按照自己的逻辑加上括号,或者分成两个if语句来写