1. 程式人生 > >LeetCode:227. 基本計算器 II [Java實現]

LeetCode:227. 基本計算器 II [Java實現]

實現一個基本的計算器來計算一個簡單的字串表示式的值。

字串表示式僅包含非負整數,+, - ,*,/ 四種運算子和空格 。 整數除法僅保留整數部分。

示例 1:

輸入: “3+2*2”
輸出: 7
示例 2:

輸入: ” 3/2 ”
輸出: 1
示例 3:

輸入: ” 3+5 / 2 ”
輸出: 5

這是一個典型的棧的應用。上程式碼

s = s.replaceAll(" ", "");
        //if(!s.contains("+") &&!s.contains("-")&&!s.contains("*")&&!s.contains("+")){}
char[] chars = s.toCharArray(); int res = 0; Map<Character, Integer> tool = new HashMap<>(); tool.put('+', 1); tool.put('-', 1); tool.put('*', 2); tool.put('/', 2); Stack<Integer> numbers = new Stack<>(); Stack<Character> signs = new
Stack<>(); int pos = 0; while (pos == 0 || !numbers.isEmpty()) { if (pos < chars.length && chars[pos] <= '9' && chars[pos] >= '0') { int num = 0; while (pos < chars.length && chars[pos] <= '9' && chars[pos] >= '0'
) { num = (num * 10 + chars[pos] - '0'); pos++; } if (pos != chars.length) pos--; numbers.push(num); } else { while (signs.size() != 0 && (pos == chars.length || tool.get(chars[pos]) <= tool.get(signs.peek()))) { char sign = signs.pop(); int r = numbers.pop(); int l = numbers.pop(); res = caculate(l, r, sign); numbers.push(res); } if (pos != chars.length) signs.push(chars[pos]); } if (numbers.size() == 1 && signs.isEmpty() && pos == chars.length) break; if (pos != chars.length) pos++; } return numbers.pop(); } private int caculate(int l, int r, char sign) { if (sign == '+') return l + r; else if (sign == '-') return l - r; else if (sign == '*') return l * r; else return l / r; }