LeetCode 224. 基本计算器
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                LeetCode 224. 基本计算器
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                224. 基本計(jì)算器
?
?
?
【雙棧】nums用來存數(shù),ops用來存符號(hào)。
1.預(yù)處理:把所有空格去掉,在前面加個(gè)‘0',防止出現(xiàn) -1 + 2 這種樣例。
2.遍歷
(1)遇到 '(' 直接壓入ops。
(2)遇到數(shù)字,通過 t * 10 + c - ‘0’ 直接計(jì)算出數(shù)值。
(3)遇到 ')' 把前面直到 '(' 的表達(dá)式算完,并把 '(' 丟掉。
(4)遇到 '+' 把前面直到? '(' 的表達(dá)式算完,'(' 不能丟;或者算到ops為空。
(5)遇到 '-',這種情況比較特殊,需要看一下前面是不是 '(' ,如果是的話往nums里插入一個(gè)0,防止這種不講武德的樣例 0 - ( - ( - 3 + 4) - 4)。
class Solution {// 雙棧 1:23 2:48public int calculate(String s) {Deque<Integer> nums = new LinkedList();Deque<Character> ops = new LinkedList(); s = s.replace(" ", "");s = "0" + s;int n = s.length(), t = 0;int flag = 0;for (var i = 0; i < n; i++) {char c = s.charAt(i);if (c == ' ') continue;if (c == '(') {ops.push(c);} else if (c == ')') {if (flag != 0) {nums.push(t); t = 0;flag = 0;}while (!ops.isEmpty()) {char top = ops.poll();if (top == '(') break;else if (top == '+') {nums.push(nums.poll() + nums.poll());} else if (top == '-') {int tmp = nums.poll();nums.push(nums.poll() - tmp);}}// System.out.println(nums.peek());} else if (c == '+' || c == '-') {if (s.charAt(i - 1) == '(') {nums.push(0);ops.push('-'); continue;}if (flag != 0) {nums.push(t); t = 0;flag = 0;}while (!ops.isEmpty()) {char top = ops.poll();if (top == '(') {ops.push('('); break;} else if (top == '+') {nums.push(nums.poll() + nums.poll());} else if (top == '-') {int tmp = nums.poll();nums.push(nums.poll() - tmp);}}// System.out.println(nums.peek());ops.push(c);} else {t = t * 10 + c - '0';if (flag == 0) flag = 1;if (i == n - 1) {nums.push(t); t = 0;}}}while (!ops.isEmpty()) {char top = ops.poll();if (top == '+') {nums.push(nums.poll() + nums.poll());} else if (top == '-') {int tmp = nums.poll();if (nums.isEmpty()) {nums.push(-tmp);} else {nums.push(nums.poll() - tmp);}}}return nums.poll();} }總結(jié)
以上是生活随笔為你收集整理的LeetCode 224. 基本计算器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 英语初级单词(二)
- 下一篇: 大数据存储:扩展Hadoop的十大要点
