逆波兰表达式 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

相关推荐
maosheng11463 小时前
RHCSA的第一次作业
linux·运维·服务器
wifi chicken4 小时前
Linux 端口扫描及拓展
linux·端口扫描·网络攻击
智者知已应修善业4 小时前
【proteus中lm339电压滞回比较器达到三角波转换成方波】2023-4-13
驱动开发·经验分享·笔记·硬件架构·proteus·硬件工程
旺仔.2914 小时前
Linux 信号详解
linux·运维·网络
放飞梦想C4 小时前
CPU Cache
linux·cache
I_LPL4 小时前
hot100贪心专题
数据结构·算法·leetcode·贪心
551只玄猫4 小时前
新编大学德语1第三版笔记 第5课Essen und Trinken
笔记·学习笔记·德语·外语·德语a1·自学德语·新编大学德语
Hoshino.415 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
不只会拍照的程序猿6 小时前
《嵌入式AI筑基笔记02:Python数据类型01,从C的“硬核”到Python的“包容”》
人工智能·笔记·python
播播资源7 小时前
CentOS系统 + 宝塔面板 部署 OpenClaw源码开发版完整教程
linux·运维·centos