【问题标题】:Python Solution vs C++ Solution of leetcode 1039 [closed]leetcode 1039 的 Python 解决方案 vs C++ 解决方案 [关闭]
【发布时间】:2019-05-06 09:49:35
【问题描述】:

Leetcode 1039

我用python写了一段代码。

class Solution(object):
    def minScoreTriangulation(self, A):
        self.dp = [[-1]*len(A)]*len(A)
        ret = self.calc(A, 0, len(A)-1)
        return ret

    def calc(self, A, x, y):
        if math.ceil(y-x) < 2:
            return 0

        if self.dp[x][y] != -1:
            return self.dp[x][y]

        mn = sys.maxint
        for i in range(x+1, y):
            mn = min(mn, (self.calc(A, x, i) + self.calc(A, i, y) + A[x]*A[y]*A[i]))

        self.dp[x][y] = mn
        return mn

我也用同样的逻辑写了一个 C++ 解决方案。

class Solution {
public:
    int minScoreTriangulation(vector<int>& A) {
        vector<int> row(A.size(), -1);
        vector<vector<int>> dp(A.size(), row);

        int ret =calc(dp, A, 0, A.size()-1);

        return ret;
    }

    int calc(vector<vector<int>>& dp, vector<int>& A, int x, int y)
    {
        if ((y-x) < 2)
            return 0;

        if(dp[x][y] != -1) return dp[x][y];

        int mn = INT_MAX;

        for( int i=x+1; i<y ; i++)
        {
            mn = min(mn, calc(dp, A, x, i)+calc(dp, A, i, y)+A[x]*A[y]*A[i]);
        }
        dp[x][y] =mn;
        return mn;
    }
};

python 解决方案给了我错误的答案。 有人可以解释一下我的 python 解决方案有什么问题吗?

【问题讨论】:

标签: python c++ dynamic-programming


【解决方案1】:

问题出在这一行:

self.dp = [[-1]*len(A)]*len(A)

在python中,不能用这种方式初始化一个二维数组,因为会引用同一个[-1]*len(A),改成:

self.dp = [[-1]*len(A) for i in range(len(A))]

它会正常工作的。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多