【算法刷题日记】LeetCode 227 基本计算器 II|栈处理运算优先级 C 语言
刷题日期2026.5.3题目227. 基本计算器 II难度中等语言C 语言优秀题解https://leetcode.cn/problems/basic-calculator-ii/solutions/91271/chai-jie-fu-za-wen-ti-shi-xian-yi-ge-wan-zheng-ji-/一、看到题目的第一想法题目要求计算带 - * /的表达式还有空格必须处理运算优先级。第一反应乘除优先级高遇到立刻算加减先入栈最后统一加用栈完美解决时间 O (n)最优解二、解题思路栈数字收集支持 123、456 这种多位数运算符判断直接入栈-入栈负数*/立即和栈顶计算结果覆盖栈顶最后把栈里所有数字相加就是最终结果自动跳过空格三、AC 代码C 语言c运行#include stdio.h #include stdlib.h #include string.h #include ctype.h int calculate(char * s){ int len strlen(s); int* stack (int*)malloc(len * sizeof(int)); int top 0; int num 0; char op ; for(int i 0; i len; i){ // 收集数字 if(isdigit(s[i])){ num num * 10 (s[i] - 0); } // 遇到运算符 or 末尾执行计算 if((!isdigit(s[i]) s[i] ! ) || i len - 1){ if(op ) stack[top] num; else if(op -) stack[top] -num; else if(op *) stack[top-1] * num; else if(op /) stack[top-1] / num; op s[i]; num 0; } } // 求和 int res 0; for(int i 0; i top; i) res stack[i]; free(stack); return res; }四、实现要点必看多位数处理num num*10 s[i]-0减法变负数入栈最后统一加法最简洁乘除直接算不用等直接用栈顶计算自动跳过空格代码里已经处理不用额外判断五、今日收获心得表达式计算 栈逆波兰、计算器、括号运算全是栈。运算优先级最优解法乘除立即算加减入栈最后加。代码短、效率高、逻辑清晰面试笔试高频原题六、总结LeetCode 227 是表达式计算必背题。记住一句话乘除立即算加减入栈最后求和直接秒杀坚持每日一题算法稳步提升
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2571165.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!