diff --git a/leetcode/0150.Evaluate-Reverse-Polish-Notation/150. Evaluate Reverse Polish Notation.go b/leetcode/0150.Evaluate-Reverse-Polish-Notation/150. Evaluate Reverse Polish Notation.go index eac59410..e9137549 100644 --- a/leetcode/0150.Evaluate-Reverse-Polish-Notation/150. Evaluate Reverse Polish Notation.go +++ b/leetcode/0150.Evaluate-Reverse-Polish-Notation/150. Evaluate Reverse Polish Notation.go @@ -5,46 +5,23 @@ import ( ) func evalRPN(tokens []string) int { - if len(tokens) == 1 { - i, _ := strconv.Atoi(tokens[0]) - return i - } - stack, top := []int{}, 0 - for _, v := range tokens { - switch v { - case "+": - { - sum := stack[top-2] + stack[top-1] - stack = stack[:top-2] - stack = append(stack, sum) - top-- - } - case "-": - { - sub := stack[top-2] - stack[top-1] - stack = stack[:top-2] - stack = append(stack, sub) - top-- - } - case "*": - { - mul := stack[top-2] * stack[top-1] - stack = stack[:top-2] - stack = append(stack, mul) - top-- - } - case "/": - { - div := stack[top-2] / stack[top-1] - stack = stack[:top-2] - stack = append(stack, div) - top-- - } - default: - { - i, _ := strconv.Atoi(v) - stack = append(stack, i) - top++ + stack := make([]int, 0, len(tokens)) + for _, token := range tokens { + v, err := strconv.Atoi(token) + if err == nil { + stack = append(stack, v) + } else { + num1, num2 := stack[len(stack)-2], stack[len(stack)-1] + stack = stack[:len(stack)-2] + switch token { + case "+": + stack = append(stack, num1+num2) + case "-": + stack = append(stack, num1-num2) + case "*": + stack = append(stack, num1*num2) + case "/": + stack = append(stack, num1/num2) } } } diff --git a/website/content/ChapterFour/0100~0199/0150.Evaluate-Reverse-Polish-Notation.md b/website/content/ChapterFour/0100~0199/0150.Evaluate-Reverse-Polish-Notation.md index 9b06aa85..0e4614d5 100644 --- a/website/content/ChapterFour/0100~0199/0150.Evaluate-Reverse-Polish-Notation.md +++ b/website/content/ChapterFour/0100~0199/0150.Evaluate-Reverse-Polish-Notation.md @@ -66,46 +66,23 @@ import ( ) func evalRPN(tokens []string) int { - if len(tokens) == 1 { - i, _ := strconv.Atoi(tokens[0]) - return i - } - stack, top := []int{}, 0 - for _, v := range tokens { - switch v { - case "+": - { - sum := stack[top-2] + stack[top-1] - stack = stack[:top-2] - stack = append(stack, sum) - top-- - } - case "-": - { - sub := stack[top-2] - stack[top-1] - stack = stack[:top-2] - stack = append(stack, sub) - top-- - } - case "*": - { - mul := stack[top-2] * stack[top-1] - stack = stack[:top-2] - stack = append(stack, mul) - top-- - } - case "/": - { - div := stack[top-2] / stack[top-1] - stack = stack[:top-2] - stack = append(stack, div) - top-- - } - default: - { - i, _ := strconv.Atoi(v) - stack = append(stack, i) - top++ + stack := make([]int, 0, len(tokens)) + for _, token := range tokens { + v, err := strconv.Atoi(token) + if err == nil { + stack = append(stack, v) + } else { + num1, num2 := stack[len(stack)-2], stack[len(stack)-1] + stack = stack[:len(stack)-2] + switch token { + case "+": + stack = append(stack, num1+num2) + case "-": + stack = append(stack, num1-num2) + case "*": + stack = append(stack, num1*num2) + case "/": + stack = append(stack, num1/num2) } } }