返回顶部
首页 > 资讯 > 后端开发 > Python >leetcode 241. Differ
  • 528
分享到

leetcode 241. Differ

leetcodeDiffer 2023-01-31 02:01:22 528人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

题目:Given a string of numbers and operators, return all possible results from computing all the different possible ways t

题目:

Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are+- and *.

大意是给定一个运算,求解所有运算序列的解

例如

Input: "2*3-4*5"

(2*(3-(4*5))) = -34
((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10

Output: [-34, -14, -10, -10, 10]

算法思路:

将运算转换成栈过程,这样就将问题转换成一个递归问题

即每一步分为两种走法:

    1)继续向栈中添加数字与运算符

    2)弹出2个数字1个运算符进行计算


代码:

class Solution(object):
    def addOperatorAndNumber(self, inputList, stack):
        if len(inputList) < 2:
            return []
        stack.append(inputList[0])
        stack.append(inputList[1])

        inputList = inputList[2:]
        return self.calculate(inputList,stack)

    def calculateTopStack(self, inputList, stack):
        number1 = int(stack.pop())
        operator = stack.pop()
        number2 = int(stack.pop())

        if operator == "+":
            stack.append(number1 + number2)
        elif operator == "-":
            stack.append(number2 - number1)
        elif operator == "*":
            stack.append(number1 * number2)

        return self.calculate(inputList,stack)

    def calculate(self, inputList, stack):
        if len(stack) == 1:
            if len(inputList) == 0:
                return [stack[0]]
            else:
                return self.addOperatorAndNumber(inputList,stack)

        result1 = self.calculateTopStack(inputList[:], stack[:])
        result2 = self.addOperatorAndNumber(inputList[:],stack[:])

        result1.extend(result2)
        return result1

    def diffWaysToCompute(self, input):
        """
        :type input: str
        :rtype: List[int]
        """

        input = input.replace('+'," + ")
        input = input.replace("-"," - ")
        input = input.replace("*"," * ")

        inputList = input.split(" ")
        stack = [int(inputList[0])]
        return  self.calculate(inputList[1:],stack)




--结束END--

本文标题: leetcode 241. Differ

本文链接: https://lsjlt.com/news/186551.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作