已解决
算法通关村第四关-黄金挑战基础计算器问题
来自网友在路上 151851提问 提问时间:2023-11-01 12:08:02阅读次数: 51
最佳答案 问答题库518位专家为你答疑解惑
大家好我是苏麟 , 今天带来栈的比较难的问题 .
计算器问题
基础计算器
描述 :
给你一个字符串表达式 s
,请你实现一个基本计算器来计算并返回它的值。
s
由数字、'+'
、'-'
、'('
、')'
、和' '
组成s
表示一个有效的表达式- '+' 不能用作一元运算(例如, "+1" 和
"+(2 + 3)"
无效) - '-' 可以用作一元运算(即 "-1" 和
"-(2 + 3)"
是有效的) - 输入中不存在两个连续的操作符
- 每个数字和运行的计算将适合于一个有符号的 32位 整数
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()
。
题目 :
LeetCode 224.基本计算器 :
224. 基本计算器
分析 :
计算器也是非常常见的问题,解决运算器问题,最好的工具就是栈。我们需要两个变量来记录符号和运算后的值 , 因为题目中只有 + - ( ) 和空格 , 所以我们遇到空格就跳过 , 遇到就把符号位变为1 , 遇到减号就把符号位变为 -1 , 遇到 ( 就把计算的值和符号放到栈里 , 遇到 ) 就把栈中的值和符号取出来和当前的数字相加 , 遇到数字就进行操作 ... ...
当然这里说可能不太好理解 , 下面有个视频大家可以更好的理解这个思路 .
视频连接 : 基础计算器
解析 :
这个代码写的不是很华丽 , 但是是这个意思 ...
//LeetCode
class Solution {public int calculate(String s) {//0 + (1+(4+5+2)-3)+(6+8)Stack<Integer> stack = new Stack<>();int nums = 0;int flag = 1;int temp = 0;int n = 0;while( n < s.length()){char c = s.charAt(n);int d = c - '0';if(c == ' '){n++;}else if(c == '+'){flag = 1;n++;}else if(c == '-'){flag = -1;n++;}else if(c == '('){stack.push(nums);stack.push(flag);nums = 0;flag = 1;n++;}else if(c == ')'){int preFlag = stack.pop();int preNums = stack.pop();nums = nums * preFlag + preNums;n++;}else{temp = c - '0';n++;while(n < s.length() && s.charAt(n) >= '0' && s.charAt(n) <= '9'){char r = s.charAt(n);temp = 10 * temp + (r - '0');n++;}nums = nums + temp * flag;}}return nums;}
}
这关就到这里 , 下一关见!
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"算法通关村第四关-黄金挑战基础计算器问题":http://eshow365.cn/6-29319-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 自己动手实现一个深度学习算法——二、神经网络的实现
- 下一篇: mysql:B+树/事务