leetcode_rust/
evaluate_reverse_polish_notation.rs

1#![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}