タイトル説明:
文字列式を与えてください。その値を計算して返すための基本的な計算機を実装してください。
促す:
- 1 <= s.length <= 3 * 105
- sは、数字、「+」、「-」、「(」、「)」、および「」で構成されます。
- sは有効な式を表します
例1:
入力:s = "1 + 1"
出力:2
例2:
入力:s = "2-1 + 2"
出力:3
例3:
入力:s = "(1+(4 + 5 + 2)-3)+(6 + 8)"
出力:23
コードは次のように表示されます。
class Solution {
public int calculate(String s) {
Deque<Character> deque = new LinkedList<>();
for (char c : s.toCharArray()) {
deque.offer(c);
}
return sum(deque);
}
public int sum(Deque<Character> deque) {
Stack<Integer> stack = new Stack<>();
char sign = '+';
int num = 0;
int res = 0;
while (!deque.isEmpty()) {
char c = deque.poll();
if (Character.isDigit(c)) {
num = num * 10 + c - '0';
}
if (c == '(') {
num = sum(deque);
}
if ((!Character.isDigit(c) && c != ' ') || deque.isEmpty()) {
if (sign == '+') {
stack.push(num);
} else if (sign == '-') {
stack.push(-num);
} else if (sign == '*') {
stack.push(stack.pop() * num);
} else if (sign == '/') {
stack.push(stack.pop() / num);
}
num = 0;
sign = c;
}
if (c == ')') {
break;
}
}
for (int i : stack) {
res += i;
}
return res;
}
}