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

相关推荐
超级大只老咪1 小时前
快速进制转换
笔记·算法
嵩山小老虎1 小时前
Windows 10/11 安装 WSL2 并配置 VSCode 开发环境(C 语言 / Linux API 适用)
linux·windows·vscode
TracyCoder1232 小时前
LeetCode Hot100(19/100)——206. 反转链表
算法·leetcode
Fleshy数模2 小时前
CentOS7 安装配置 MySQL5.7 完整教程(本地虚拟机学习版)
linux·mysql·centos
a41324472 小时前
ubuntu 25 安装vllm
linux·服务器·ubuntu·vllm
踩坑记录2 小时前
leetcode hot100 94. 二叉树的中序遍历 easy 递归 dfs
leetcode
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.3 小时前
Keepalived VIP迁移邮件告警配置指南
运维·服务器·笔记
一只自律的鸡4 小时前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug
17(无规则自律)4 小时前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考
!chen4 小时前
linux服务器静默安装Oracle26ai
linux·运维·服务器