Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 爆炸的阳台在leetcode中超时_Python_Algorithm_Recursion_Memoization - Fatal编程技术网

Python 爆炸的阳台在leetcode中超时

Python 爆炸的阳台在leetcode中超时,python,algorithm,recursion,memoization,Python,Algorithm,Recursion,Memoization,给定n个引出序号,索引范围为0到n-1。每个气球上都画有一个由数组nums表示的数字。你被要求炸毁所有的气球。如果你的气球爆了,你会得到nums[左]*nums[i]*nums[右]硬币。这里左和右是i的相邻索引。突发之后,左侧和右侧变得相邻 明智地将气球爆破,找出你能收集到的最多硬币 nums=[3,1,5,8]-->[3,5,8]-->[3,8]-->[8]-->[] 硬币=3*1*5+3*5*8+1*3*8+1*8*1=167 我有时间做一些测试用例 想知道如何改进吗?请只给我一些提示 c

给定n个引出序号,索引范围为0到n-1。每个气球上都画有一个由数组nums表示的数字。你被要求炸毁所有的气球。如果你的气球爆了,你会得到nums[左]*nums[i]*nums[右]硬币。这里左和右是i的相邻索引。突发之后,左侧和右侧变得相邻

明智地将气球爆破,找出你能收集到的最多硬币

nums=[3,1,5,8]-->[3,5,8]-->[3,8]-->[8]-->[] 硬币=3*1*5+3*5*8+1*3*8+1*8*1=167

我有时间做一些测试用例

想知道如何改进吗?请只给我一些提示

class Solution(object):
        def recursion(self, nums, index, dp):
            r = -1
            if not nums:
                return 0
            if len(nums) == 1:
                return nums[0]
            if str(nums) in dp:
                return dp[str(nums)]
            if index >= len(nums):
                return 0
            for i in range(len(nums)):
                if i == 0:
                    r = max(r, nums[i]*nums[i+1] + self.recursion(nums[0:i]+nums[i+1:][:], i, dp))
                elif i == len(nums)-1:
                    r = max(r, nums[i-1]*nums[i] + self.recursion(nums[0:i]+nums[i+1:][:], i, dp))
                else:
                    r = max(r, nums[i-1]*nums[i]*nums[i+1] + self.recursion(nums[0:i]+nums[i+1:][:], i, dp))
            dp[str(nums)] = r
            return r

        def maxCoins(self, nums):
            """
            :type nums: List[int]
            :rtype: int
            """
            return self.recursion(nums, 0, {})
提示:尽量避免在每个递归中复制列表


p、 我很确定有一个动态规划解决方案的时间复杂度是O(n^3)

也许
矩阵链乘法问题的DP解决方案可能会给出一些想法如果代码有效,您可以将其发布在Codereview上作为替代方案。