逆波兰表达式 LeetCode 题解及相关思路笔记

本题描述:

请计算该表达式的值,并返回一个整数,表示表达式的结果。

注意事项:

  • 有效的运算符包括 '+', '-', '*''/'
  • 每个操作数可以是整数或另一个表达式。
  • 两个整数之间的除法总是向零截断(即,结果去掉小数部分,向零靠拢)。
  • 不会有除以零的情况。
  • 输入是一个有效的逆波兰表达式。
  • 答案以及所有中间计算结果都可以用 32 位整数表示。

示例 1:

输入: tokens = ["2","1","+","3","*"]

输出: 9

解释: ((2 + 1) * 3) = 9

示例 2:

输入: tokens = ["4","13","5","/","+"]

输出: 6

解释: (4 + (13 / 5)) = 6

示例 3:

输入: tokens = ["10","6","9","3","+","-11","","/","","17","+","5","+"]

输出: 22

解释: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5 = 22

约束条件:

  • 1 <= tokens.length <= 10^4
  • tokens[i] 要么是运算符 "+", "-", "*", "/",要么是 [-200, 200] 范围内的整数。

做题思路总结:

  1. 使用一个整型栈 int stack
  2. 依次遍历 token:
    • 是数字就转 int 入栈。
    • 是运算符 +/-/*//,弹出栈顶两个数(注意顺序:先右后左),按操作符计算,把结果入栈。
  3. 所有 token 处理完后,栈中最后一项即为结果。

关于字符串转 int 的函数

C 语言没有 str2int 这个标准函数。用法如下:

  • 推荐用 strtol int num = (int)strtol(token, NULL, 10);
  • atoi 也能用,但不建议。
  • sscanf 也可用,但写法更繁琐。

strtol 函数用法解析

原型: long int strtol(const char *nptr, char **endptr, int base);

  • nptr:要转换的字符串。
  • endptr:转换结束后指针(不关心就填 NULL)。
  • base:进制(题目用 10)。

举例:

c 复制代码
int num = (int)strtol(token, NULL, 10);

如果 token = "123" 转出来就是 123


NULL 与 10 的含义

  • NULL 表示不关心剩余未处理字符串。
  • 10 代表十进制,如果写 16 就是十六进制。

总结

本题核心是逆波兰表达式与栈的结合 ,C 里字符串转 int 用 strtol(token, NULL, 10) 最稳妥。掌握这几个知识点,解此类表达式题目将很高效!


原题链接: LeetCode - Evaluate Reverse Polish Notation

相关推荐
石像鬼₧魂石17 分钟前
Kali Linux 网络端口深度扫描
linux·运维·网络
LYFlied20 分钟前
【每日算法】LeetCode 17. 电话号码的字母组合
前端·算法·leetcode·面试·职场和发展
alengan21 分钟前
linux上面写python3日志服务器
linux·运维·服务器
zhdy567891 小时前
最简单方法 设置matlab坐标轴刻度标签的字号,设置坐标轴标题和图形标题,并指定字号。画出的图片背景设置为白色,
笔记
崇山峻岭之间1 小时前
Matlab学习笔记02
笔记·学习·matlab
木木em哈哈1 小时前
C语言多线程
笔记
Rose sait1 小时前
【环境配置】Linux配置虚拟环境pytorch
linux·人工智能·python
叶之香2 小时前
CentOS/RHEL 7、8安装exfat和ntfs文件系统
linux·运维·centos
一世琉璃白_Y2 小时前
pg配置国内数据源安装
linux·python·postgresql·centos