leetcode_rust/
evaluate_reverse_polish_notation.rs1#![allow(dead_code)]
2
3pub fn eval_rpn(tokens: Vec<String>) -> i32 {
4 let mut stack: Vec<i32> = vec![];
5 let add = String::from("+");
6 let sub = String::from("-");
7 let mul = String::from("*");
8 let div = String::from("/");
9
10 for token in tokens {
11 if token == add || token == sub || token == mul || token == div {
12 let b = stack.pop().unwrap();
13 let a = stack.pop().unwrap();
14 let c;
15 if token == add {
16 c = a + b;
17 } else if token == sub {
18 c = a - b;
19 } else if token == mul {
20 c = a * b;
21 } else {
22 c = a / b;
23 }
24
25 stack.push(c);
26 } else {
27 stack.push(token.parse().unwrap());
28 }
29 }
30 stack.pop().unwrap()
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn test1() {
39 let ss = vec!["4", "13", "5", "/", "+"];
40 let mut tokens = vec![];
41 for s in ss {
42 tokens.push(String::from(s));
43 }
44
45 assert_eq!(eval_rpn(tokens), 6);
46 }
47}