摘要:復(fù)雜度思路用兩個(gè)來分別記錄當(dāng)前的結(jié)果和操作符注意每一次統(tǒng)計(jì)當(dāng)前的的時(shí)候,要看一下下一位的操作符。有一種的方法,是表示的是匹配任意的空白符,包括空格,制表符,換行符,中文全角空格等。也可以用更簡單的方法,。
LeetCode[227] Basic Calculator II
StackImplement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +, -, *, /
operators and empty spaces . The integer division should truncate
toward zero.You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7 " 3/2 " = 1 " 3+5 / 2 " = 5
復(fù)雜度
O(N), O(N)
思路
用兩個(gè)stack來分別記錄當(dāng)前的結(jié)果和操作符(operator), 注意每一次統(tǒng)計(jì)當(dāng)前的operand的時(shí)候,要看一下下一位的操作符。如果下一位是high operator("+"或"/"), 就要先把當(dāng)前的數(shù)和操作符都要先push回stack保留數(shù)據(jù),如果當(dāng)前stack不為空且已經(jīng)有高位運(yùn)算符在stack的頂部,就先計(jì)算一次重新計(jì)算當(dāng)前的數(shù)字,再考慮之后的運(yùn)算。
有一種replace all multiple spaces with one space的方法,是s.replaceAll("s+",""), s 表示的是匹配任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格等。也可以用更簡單的方法,replaceAll(" +", "")。
代碼
public double calculator(String s) { // delete multiple spaces s = s.trim().replaceAll(" +", ""); char[] arr = s.toCharArray(); Stackres = new Stack<>(); Stack operator = new Stack<>(); res.push(0.0); operator.push("+"); for(int i = 0; i < arr.length; i ++) { double val = 0; int j = i; while(j < arr.length && Character.isDigit(arr[j])) { val *= 10; val += arr[j] - "0"; j ++; } // if(!operator.isEmpty() && isHighOp(operator.peek())) { double temp = getValue(res.pop(), val,operator.pop()); val = temp; } if(j < arr.length && isHighOp(arr[j])) { res.push(val); operator.push(arr[j]); } else { double temp = getValue(res.pop(), val, operator.pop()); res.push(temp); if(j < arr.length) operator.push(arr[j]); } i = j; } // notice the format; DecimalFormal df = new DecimalFormat("#.##"); return Double.parseDouble(df.format(res.pop())); } public boolean isHighOp(Character ch) { return ch == "*" || ch == "/"; } public double getValue(double op1, double op2, Character ch) { if(ch == "+") return op1 + op2; if(ch == "-") return op1 - op2; if(ch == "*") return op1 * op2; return op1 / op2; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/66321.html
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...
摘要:題目鏈接,就是感覺條件有點(diǎn)多簡單點(diǎn)的寫法,把直接用存在里面,就存成,存成題目鏈接這題就是碰到在加減后面怎么處理的問題。用一個(gè)來表示之前的,所以碰到現(xiàn)在是乘的時(shí)候就,除類似。 224. Basic Calculator 題目鏈接:https://leetcode.com/problems... stack,就是感覺條件有點(diǎn)多 public class Solution { pub...
摘要:但是乘除就會(huì)有問題,要特殊處理。這題只有加減和括號(hào),優(yōu)先級(jí)就是括號(hào)里的先計(jì)算,所有我們把括號(hào)里的內(nèi)容當(dāng)做操作的基本單位。遇到遇到和,遇到遇到,彈出再遇到彈出,這里只是把對(duì)數(shù)字的操作變成了對(duì)的操作,去括號(hào)的邏輯一樣。 The expression string contains only non-negative integers, +, -, *, / operators and em...
摘要:難點(diǎn)在于多了括號(hào)后如何處理正負(fù)號(hào)。但是每多一個(gè)括號(hào),都要記錄下這個(gè)括號(hào)所屬的正負(fù)號(hào),而每當(dāng)一個(gè)括號(hào)結(jié)束,我們還要知道出來以后所在的括號(hào)所屬的正負(fù)號(hào)。 Basic Calculator I 最新更新請(qǐng)見: https://yanjia.li/zh/2019/01/... Implement a basic calculator to evaluate a simple express...
摘要:復(fù)雜度思路將字符串先轉(zhuǎn)換成后綴表達(dá)式,再將其出來。 Leetcode[224] Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ),...
閱讀 1639·2021-10-09 09:44
閱讀 2787·2021-10-08 10:04
閱讀 2468·2021-09-26 09:55
閱讀 3840·2021-09-22 10:02
閱讀 3311·2019-08-29 17:08
閱讀 1069·2019-08-29 15:08
閱讀 2957·2019-08-26 13:52
閱讀 3274·2019-08-26 13:34