当前位置:首页 > 编程笔记 > 正文
已解决

算法通关村第四关-黄金挑战基础计算器问题

来自网友在路上 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 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!