leetcodeブラシのタイトル・ノート(のpython3) - 。150は、逆ポーランド記法を評価

150は、逆ポーランド記法を評価します

逆ポーランド記法での算術式の値を評価します。

有効な演算子は+です、 - 、*、/。各オペランドは整数または別の表現であってもよいです。

注意:

二つの整数間の部門はゼロに向かって切り捨てる必要があります。
与えられたRPN式は常に有効です。手段という表現は、常に結果を評価するだろうし、ゼロ操作によって任意の格差がありません。
例1:

入力:[「2」、「1」、「+」、「3」、「*」]
出力:9
説明:((2 + 1)* 3)= 9
例2:

入力:[「4」、「13」、「5」、「/」、「+」]
出力:6
説明:(4 +(13/5))= 6
実施例3:

入力:[「10」、「6」、「9」、「3」、「+」、「-11」、「"『/』、"」、 『17』、 『+』、 『5』、 「+」]
出力:22
説明:
((10 *(6 + 3 /((9)* -11)))+ 17)+ 5
=((10 *(6 * -11 /(12)))+ 17)+ 5
=((10 * / -132(6))+ 17)+ 5
=((10×0)+ 17)+ 5
=(0 + 17)+ 5
= 17 + 5
= 22

問題解決のためのアイデア

func evalRPN(tokens []string) int {
	stack := []int{}
	for _, v := range tokens {

		if val, err := strconv.Atoi(v); err == nil {
			stack = append(stack, val)
		} else {
			if len(stack) < 2 {
				return 0
			}
            n1, n2 := stack[len(stack)-2], stack[len(stack)-1]
            fmt.Println(n1,n2,v)
            stack = stack[:len(stack)-2]
			n := 0
			switch v {
			case "+":
				n += n1 + n2
			case "-":
				n += n1 - n2
			case "*":
				n += n1 * n2
			case "/":
				n += n1 / n2
			default:
				return 0
			}
			stack = append(stack, n)
		}
	}
	return stack[len(stack)-1]   
}
公開された98元の記事 ウォンの賞賛0 ビュー1448

おすすめ

転載: blog.csdn.net/weixin_44555304/article/details/104429928