Leetcode 224.基本计算器
基本计算器
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。
示例 1:
输入: "1 + 1"
输出: 2
示例 2:
输入: " 2-1 + 2 "
输出: 3
示例 3:
输入: "(1+(4+5+2)-3)+(6+8)"
输出: 23
说明:
- 你可以假设所给定的表达式都是有效的。
- 请不要使用内置的库函数 eval。
题目分析:最中规中矩的做法就是,先中缀表达式转后缀表达式,然后根据后缀表达式计算答案,Java跑了100ms,算是很慢了,中缀转后缀的方法是:
1.若为数字直接加到后面
2.若为'(',入符号栈
3.若为运算符,则将优先级大于等于它的运算符先弹出并记录带答案,再将其入栈,本题运算符只有+,-,优先级相同
4.若为')',弹出运算符直到遇到'('
因为可能存在不止1位的数字,所以用一个空格来区分,还有就是连字符串的时候StringBuffer要比String快得多
1 import java.util.Stack; 2 3 public class Solution { 4 5 public static void solve(Stack<Integer> stkNum, char op) { 6 int a = stkNum.peek(); 7 stkNum.pop(); 8 int b = stkNum.peek(); 9 stkNum.pop(); 10 if(op == '+') { 11 stkNum.push(b + a); 12 } 13 else if(op == '-') { 14 stkNum.push(b - a); 15 } 16 } 17 18 public static String infixToSuffix(String s) { 19 StringBuffer sb = new StringBuffer(""); 20 Stack<Character> stkOp = new Stack<>(); 21 int num, len = s.length(); 22 for(int i = 0; i < len; i ++) { 23 char ch = s.charAt(i); 24 if(ch == ' ') { 25 continue; 26 } 27 else if(ch == '(') { 28 stkOp.push(ch); 29 } 30 else if(ch == '+' || ch == '-') { 31 while(stkOp.size() > 0 && stkOp.peek() != '(') { 32 sb.append(stkOp.peek()); 33 stkOp.pop(); 34 } 35 stkOp.push(ch); 36 } 37 else if(ch == ')') { 38 while(stkOp.peek() != '(') { 39 sb.append(stkOp.peek()); 40 stkOp.pop(); 41 } 42 stkOp.pop(); 43 } 44 else { 45 num = 0; 46 while(i < len && s.charAt(i) >= '0' && s.charAt(i) <= '9') { 47 sb.append(s.charAt(i)); 48 i ++; 49 } 50 sb.append(' '); 51 i --; 52 } 53 } 54 return sb.toString(); 55 } 56 57 public static int calculate(String s) { 58 Stack<Integer> stkNum = new Stack<>(); 59 String str = infixToSuffix('(' + s + ')'); 60 int num = 0; 61 //System.out.println("str = " + str); 62 for(int i = 0; i < str.length(); i ++) { 63 if(str.charAt(i) == '+') { 64 solve(stkNum, '+'); 65 } 66 else if(str.charAt(i) == '-') { 67 solve(stkNum, '-'); 68 } 69 else { 70 num = 0; 71 while(str.charAt(i) != ' ') { 72 num = num * 10 + str.charAt(i) - '0'; 73 i ++; 74 } 75 stkNum.push(num); 76 } 77 } 78 return stkNum.peek(); 79 } 80 81 public static void main(String[] args){ 82 calculate("23+45"); 83 } 84 }
转载于:https://www.cnblogs.com/kexinxin/p/10203072.html
Leetcode 224.基本计算器相关推荐
- LeetCode 224. 基本计算器
224. 基本计算器 [双栈]nums用来存数,ops用来存符号. 1.预处理:把所有空格去掉,在前面加个'0',防止出现 -1 + 2 这种样例. 2.遍历 (1)遇到 '(' 直接压入ops. ( ...
- leetcode 224. 基本计算器(栈)
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值. 示例 1: 输入:s = "1 + 1" 输出:2 示例 2: 输入:s = " 2-1 + 2 ...
- 数据结构与算法 | LeetCode 224. Basic Calculator
原文链接:https://wangwei.one/posts/alg... 前面,我们学习了 栈的实现及其应用 ,今天我们基于栈,来实现一个简单的计算器功能. 简单计算器实现 Leetcode 224 ...
- 【一天一道Leetcode】基本计算器的延伸问题
本篇推文共计2000个字,阅读时间约3分钟. 01 题目描述 题目描述: 给你一个字符串表达式s,请你实现一个基本计算器来计算并返回它的值. 整数除法仅保留整数部分. 示例: 输入:s = " ...
- leetcode 224. Basic Calculator | 224. 基本计算器(中缀表达式求值)
题目 https://leetcode.com/problems/basic-calculator/ 题解 中缀表达式求值,之前学数据结构的笔记: class Solution {public int ...
- 【LeetCode - 224】基本计算器(栈)
实现一个基本的计算器来计算一个简单的字符串表达式 s 的值. 题目链接:https://leetcode-cn.com/problems/basic-calculator/ 示例 1: 输入:s = ...
- leetcode 227. 基本计算器 II(栈)
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值. 整数除法仅保留整数部分. 示例 1: 输入:s = "3+2*2" 输出:7 解题思路 利用两个栈,一个记录 ...
- 力扣—— 224. 基本计算器(困难)
目录 题目描述 题目分析 c++代码 题目描述 给你一个字符串表达式s,请你实现一个基本的计算器来返回它的值.注意不允许使用任何将字符串作为数学表达式计算的内置函数,比如:eval(). 示例一: 输 ...
- leetcode 手写计算器 方法总结
1.leetcode 227 Basic calculator 我目前见过的最好的解法 Implement a basic calculator to evaluate a simple expres ...
- 224. 基本计算器
实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 . 示例 1: 输入: "1 + 1" ...
最新文章
- 2018-2019-1 20165226 《信息安全系统设计基础》第4周学习总结
- 不动的,稳定的,有序的东西就是低熵,相反的就是动的,不稳定的
- 总结20121016
- Visual Studio 2017 最新全量离线下载方法[有惊喜]
- mini2440驱动分析之LCD
- webstorm使用gitee_webstorm 中 git 基本操作
- html 自适应单位vw,CSS单位em、rem、vh和vw等及CSS3的calc()以及line-height百分比
- CleanCodeHandbook Chapter 5: Bit Manipulation(33-34)
- 团队开发之个人博客八(4月27)
- php twig输出html,php – HTML不呈现[Twig] / [Slim]
- 《菜菜的机器学习sklearn课堂,孔浩Java视频百度云盘
- ActiveMQ 反序列化漏洞 (CVE-2015-5254)
- 蓝桥杯 2019年号字串
- iPhoneSE4完虐国产手机,国产旗舰手机还有啥遮羞布?
- STM32 定时器主从模式,上电立即输出脉冲,输出有尖刺,解决方法
- Windows11输入法第一个候选词不显示。
- 中国大学慕课C语言第六讲作业
- JS学习手册十五 事件处理
- 【愚公系列】2021年12月 网络工程-虚拟网络
- 【面经】迅游、深科技(长城开发)——C++开发