【Leetcode】Basic Calculator
来源:互联网 发布:网络爬虫爬取什么赚钱 编辑:程序博客网 时间:2024/06/06 10:55
题目链接:https://leetcode.com/problems/basic-calculator/
题目:
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
“1 + 1” = 2
” 2-1 + 2 ” = 3
“(1+(4+5+2)-3)+(6+8)” = 23
Note: Do not use the eval built-in library function.
思路:
用栈保存操作数、操作符,要注意处理右括号的情况。
算法:
public int calculate(String s) { Stack<String> operator = new Stack<String>(); Stack<Integer> nums = new Stack<Integer>(); s = s.replace(" ", ""); int curNum = 0; // 连续字符都是数字要组合成一个数 for (int i = 0; i < s.length(); i++) { char op = s.charAt(i); if (Character.isDigit(op)) { // 当前是数字 curNum = Integer.parseInt(op + ""); while (i + 1 < s.length() && Character.isDigit(s.charAt(i + 1))) { // 后继字符也是数字,组合成一个数 char nextNum = s.charAt(i + 1); curNum = curNum * 10 + Integer.parseInt(nextNum + ""); i++; }// 一个操作数处理完 if (!operator.isEmpty() && nums.size() >= 1 && (operator.peek().equals("+") || operator.peek() .equals("-"))) { // 若操作数栈有操作数,且 // 操作符栈有+/-,则将当前数和栈中的数做相应处理 String tmp = operator.pop(); if (tmp.equals("-")) { int first = nums.pop(); nums.push(first - curNum); } else { nums.push(nums.pop() + curNum); } } else { nums.push(curNum); } } else { // 当前字符是操作符 if (op == '+' || op == '-' || op == '(') { operator.push(op + ""); } else if (op == ')') { if (operator.peek().equals("(")) { // 若括号消除,则要处理左括号前面的运算,即处理 // 1+(4)中+的计算 operator.pop(); if (!operator.isEmpty() && nums.size() >= 2 && (operator.peek().equals("+") || operator .peek().equals("-"))) { String tmp = operator.pop(); if (tmp.equals("-")) { int first = nums.pop(); int second = nums.pop(); nums.push(second - first); } else { nums.push(nums.pop() + nums.pop()); } } } else { operator.push(")"); } } } } return nums.pop(); }
1 0
- 【LeetCode】Basic Calculator && Basic Calculator II
- LeetCode - Basic Calculator & Basic Calculator II
- Leetcode之Basic Calculator & Basic Calculator II
- [leetcode] Basic Calculator
- Basic Calculator - LeetCode 224
- LeetCode Basic Calculator
- leetcode:Basic Calculator
- [leetcode][math] Basic Calculator
- [LeetCode] Basic Calculator
- Leetcode 224: Basic Calculator
- leetcode 224 Basic Calculator
- [LeetCode] Basic Calculator II
- [leetcode] Basic Calculator II
- [Leetcode] Basic Calculator
- leetcode Basic Calculator
- leetcode Basic Calculator II
- LeetCode-Basic Calculator
- leetcode Basic Calculator 栈
- Spark中组件Mllib的学习14之从文本中读取带标签的数据,生成带label的向量
- 文件夹目录下文件太多,list直接卡住的解决方式
- 【Leetcode】Maximum Product of Word Lengths
- Linux下二维码生成工具:QRencode
- Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
- 【Leetcode】Basic Calculator
- 视频格式转换
- 【Leetcode】Jump Game
- 7.python学习笔记:切割文件的合并
- 设计模式之原型模式(Prototype Pattern)
- linux中unzip命令用不了原因
- Spring Data JPA更新操作
- PowerPoint2007从“大纲”窗格中新建幻灯片
- 架构设计:系统间通信(20)——MQ:消息协议(下)