逆波兰表达式 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 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
未济1 天前
linux 配置环境变量
linux
傲世仙尊1 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
_艾伦 耶格尔.1 天前
进程间通信
linux
深圳老胡1 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
旖旎夜光1 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
Liuqy-051 天前
Linux IO编程——静态库、动态库
linux
Because_of_Her11 天前
并查集-听课笔记
笔记·算法·并查集
彧azz1 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅1 天前
linux(8) 软硬链接
linux·运维·服务器