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

相关推荐
Xudde.1 分钟前
DC-1 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全
拾饵94216 分钟前
面试回答整理(Q1–Q3)
leetcode
海绵宝宝转agent30 分钟前
2026-10-14算法+面经总结
java·笔记·算法·缓存
虚无的纽扣30 分钟前
【力扣刷题】第四天:三数之和、四数之和
算法·leetcode·职场和发展
skywalk816332 分钟前
Monty / 千脑理论(Thousand Brains Project)学习笔记
笔记·学习·monty·千脑理论
AAA代码批发商38 分钟前
DAYS 56【Linux 驱动深度】SPI 子系统驱动开发全指南:从架构、核心数据结构到设备驱动实战
linux·驱动开发·架构·内核开发·spi 子系统
听雨笑1 小时前
终端窗口关掉了,正在跑的活会不会死:三种起法各自的下场
linux
_不会dp不改名_1 小时前
leetcode_3273 数位平方和的最大值
算法·leetcode·职场和发展
程序员-Benothing1 小时前
Linux CPU性能分析:top、mpstat、pidstat、perf实战
linux·运维·服务器
霖霖7141 小时前
【ESP32笔记】ESP中的分区表
笔记·单片机·mcu·物联网