day11 代码随想录算法训练营 150. 逆波兰表达式求值
题目:150. 逆波兰表达式求值
我的感悟:
- 注意int(a/b)是0向截断 比如 -2.3 会得到-2; 比如3.6 会得到3
- a//b是向下取整,比如是-2.3 会得到-3;比如3.6 会得到3
- 主要是负数不同
理解难点:
- 0向取整注意
- 注意先弹出的是右边的,(想象二叉树的结构。先弹出的是右边节点)
代码难点:
代码示例:
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
stack = []
for ch in tokens:
if ch in ("+","-","/","*"):
num_right = stack.pop() # 先弹出的是右边的
num_left = stack.pop() # 后弹出的是左边的
if ch == "+":
stack.append(num_left+num_right)
if ch == "-":
stack.append(num_left-num_right)
if ch == "*":
stack.append(num_left*num_right)
if ch == "/":
stack.append(int(num_left/num_right)) # int是0向截断,//是向下截断。
else: # 其他都是数字 # 转化为int类型存进去
stack.append(int(ch))
return stack.pop()
通过截图:
扩展写法:
资料:
题目链接/文章讲解/视频讲解:https://programmercarl.com/0150.%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B1%82%E5%80%BC.html