摘要:复杂度思路将字符串先转换成后缀表达式,再将其出来。
Leetcode[224] Basic Calculator
StackImplement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ),
the plus +, minus sign - or * or /, 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 "1 + (2 - 3 * 4)" = -9;
复杂度
O(N), O(N)
思路
将字符串先转换成后缀表达式,再将其evaluate出来。
前后缀表达式的转换:
http://scriptasylum.com/tutor...
后缀表达式的evaluation:
http://scriptasylum.com/tutor...
代码
public int basicCalculator(String s) { s = s.trim().replaceAll(" +", ""); Stackstack = new Stack<>(); StringBuilder builder = new StringBuilder(); char[] arr = s.toCharArray(); for(int i = 0; i < arr.length; i ++) { if(arr[i] == "(") { stack.push("("); } else if(arr[i] == ")") { while(!stack.isEmpty() && stack.peek() != "(") { builder.append(stack.pop()); } // pop out the "(" stack.pop(); } else if(Character.isDigit(arr[i])) { int val = 0; for(int j = i; j < arr.length && Character.isDigit(arr[j]); j ++) { val *= 10; val += arr[j] - "0"; } builder.append(val); i = j - 1; } else { while(!stack.isEmpty() && rank(stack.peek()) >= rank(arr[j])) { builder.append(stack.pop()); } stack.push(arr[j]); } } while(!stack.isEmpty()) { builder.append(stack.pop()); } return evaluate(builder.toString()); } public int rank(Character ch) { if(ch == "+" || ch == "-") return 1; else if(ch == "*" || ch == "/") return 2; // "(" return 0; } public int evaluate(String s) { char[] arr = s.toCharArray(); Stack stack = new Stack<>(); for(int i = 0; i < arr.length; i ++) { if(Character.isDigit(arr[i])) { stack.push(arr[i] - "0"); } else { int op2 = stack.pop(); int op1 = stack.pop(); if(arr[i] == "+") { stack.push(op1 + op2); } else if(arr[i] == "-") { stack.push(op1 - op2); } else if(arr[i] == "*") { stack.push(op1 * op2); } else { stack.push(op1 / op2); } } } return stack.pop(); }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/66320.html
Problem 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 e...
摘要:题目链接,就是感觉条件有点多简单点的写法,把直接用存在里面,就存成,存成题目链接这题就是碰到在加减后面怎么处理的问题。用一个来表示之前的,所以碰到现在是乘的时候就,除类似。 224. Basic Calculator 题目链接:https://leetcode.com/problems... stack,就是感觉条件有点多 public class Solution { pub...
摘要:复杂度思路用两个来分别记录当前的结果和操作符注意每一次统计当前的的时候,要看一下下一位的操作符。有一种的方法,是表示的是匹配任意的空白符,包括空格,制表符,换行符,中文全角空格等。也可以用更简单的方法,。 LeetCode[227] Basic Calculator II Implement a basic calculator to evaluate a simple expres...
Problem Implement a basic calculator to evaluate a simple expression string. The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division sho...
Problem 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 e...
阅读 3049·2023-04-25 15:44
阅读 1826·2019-08-30 13:11
阅读 2808·2019-08-30 11:11
阅读 2977·2019-08-29 17:21
阅读 1286·2019-08-29 15:38
阅读 869·2019-08-29 12:49
阅读 1773·2019-08-28 18:19
阅读 3205·2019-08-26 14:01