Basic Calculator 基本計算器
阿新 • • 發佈:2018-09-28
pty src stack () 符號 ron 一個 += 相加
2018-09-27 22:02:36
一、Basic Calculator II
問題描述:
問題求解:
sign用來保存前一個符號,用num來記錄數字,如果碰到一個符號或者到達結尾,則需要進行入棧操作,這個時候需要結合符號進行相應的運算。
public int calculate(String s) { if (s == null || s.length() == 0) return 0; int res = 0; Stack<Integer> stack = new Stack<>(); char sign = ‘+‘; int num = 0; for (int i = 0; i < s.length(); i++) { if (Character.isDigit(s.charAt(i))) { num = num * 10 + s.charAt(i) - ‘0‘; } if (!Character.isDigit(s.charAt(i)) && s.charAt(i) != ‘ ‘ || i == s.length() - 1) { if (sign == ‘/‘) num = stack.pop() / num; if (sign == ‘*‘) num = stack.pop() * num; if (sign == ‘-‘) num *= -1; stack.push(num); sign = s.charAt(i); num = 0; } } while (!stack.isEmpty()) res += stack.pop(); return res; }
二、Basic Calculator
問題描述:
問題求解:
本問題中只包含了+,-和括號,首先如果只有+,-的話連Stack都不需要就可以直接遍歷一遍相加就可以了。
但是如果存在括號的情況,那麽就需要使用到一個Stack來對之前計算到的數字和符號進行保存。
public int calculate(String s) { if (s == null || s.length() == 0) return 0; Stack<Integer> stack = new Stack<>(); int res = 0; int sign = 1; int num = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (Character.isDigit(c)) num = num * 10 + c - ‘0‘; else if (c == ‘+‘) { res += num * sign; sign = 1; num = 0; } else if (c == ‘-‘) { res += num * sign; sign = -1; num = 0; } else if (c == ‘(‘) { stack.push(res); stack.push(sign); res = 0; sign = 1; } else if (c == ‘)‘) { res += num * sign; res *= stack.pop(); res += stack.pop(); num = 0; } } if (num != 0) res += num * sign; return res; }
Basic Calculator 基本計算器