表達式轉逆波蘭式

實現

import re
class Solution:
    # @param expression: A string list
    # @return: The Reverse Polish notation of this expression
    def convertToRPN(self, expression):
        # write your code here
        result = []
        op = ['#']
        for str in expression:
            if self.isNumeric(str):
                result.append(str)
            else:
                if str == '(':
                    op.append(str)
                    continue
                if str == ')':
                    while True:
                        t = op.pop();
                        if(t == '('):
                            break
                        result.append(t)
                    continue
                level1 = self.getLevel(str)
                level2 = self.getLevel(op[-1])
                if level1>level2:
                    op.append(str)
                else:
                    while True:
                        if self.getLevel(op[-1]) < level1:
                            op.append(str)
                            break
                        result.append(op.pop())
        while True:
            if(op[-1] == '#'):
                break
            result.append(op.pop())

        return result




    def isNumeric(self,str):
        return re.match(r'[+-]?[0-9]+',str)

    def getLevel(self,str):
        if str == '+' or str == '-':
            return 1
        if str == '*' or str == '/':
            return 2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章