pub fn calculate(s: String) -> i32
Expand description
§Solutions
§Approach 1: Stack
-
Time complexity: O(n)
-
Space complexity: O(n)
-
Runtime: 0ms
Memory: 2.9MB
impl Solution {
pub fn calculate(s: String) -> i32 {
let mut stack = vec![];
let mut operand = 0;
let mut result = 0;
let mut sign = 1;
stack.push(sign);
for ch in s.chars() {
match ch {
'0'...'9' => {
operand = 10 * operand + (ch as u8 - '0' as u8) as i32;
},
'(' => {
stack.push(sign);
},
')' => {
stack.pop();
},
'+' | '-' => {
result += sign * operand;
operand = 0;
sign = stack.last().unwrap() * if ch == '+' { 1 } else { -1 };
},
_ => {},
}
}
result + (sign * operand)
}
}