【问题标题】:Java Vs. Python : Why same code returning different outputs? [duplicate]Java VS。 Python:为什么相同的代码返回不同的输出? [复制]
【发布时间】:2020-04-18 19:06:07
【问题描述】:

我不明白为什么完全相同的 Python 代码在 Java 中给出不同的结果。我的意思是这两种语言的数组处理是否有任何区别,或者我在以下代码中缺少什么。

在以下代码中(即尝试解决https://leetcode.com/problems/unique-paths/),java 在 Python 被拒绝时被接受。我检查了可能的失败案例:uniquePaths(7,3) Python 返回结果 7 但 Java 返回 28(这是正确答案)。

我尝试调试并查找导致差异的代码中任何可能的差异,但没有运气。

任何人都可以就我的实施中的这种行为或任何错误提供一些见解吗?谢谢你

** Java 代码** ::

class Solution {
    public int uniquePaths(int m, int n) {
        int[][] dp = new int[m+1][n+1];


        return pathHelper(1,1,m, n, dp);
    }

    private int pathHelper(int loc_x, int loc_y, int m, int n, int[][] dp){
        if(loc_x==m && loc_y==n)return 1;

        if(loc_x >m || loc_y>n)return 0;

        if(dp[loc_x][loc_y] != 0)return dp[loc_x][loc_y];

        int count = pathHelper(loc_x + 1, loc_y, m, n, dp) + pathHelper(loc_x, loc_y+1, m, n, dp) ;

        dp[loc_x][loc_y] = count;

        return count;


    }
}

Python 代码 ::

class Solution(object):
    def uniquePaths(self, m, n):
        dp = [[0]*(n+1)]*(m+1)

        return self.pathHelper(1,1,m, n, dp)

    def pathHelper(self, loc_x, loc_y,  m, n, dp):
        if(loc_x==m and loc_y==n):
            return 1

        if(loc_x >m or loc_y>n):
            return 0


        if(dp[loc_x][loc_y] != 0):
            return dp[loc_x][loc_y]

        count = self.pathHelper(loc_x + 1, loc_y, m, n, dp) + self.pathHelper(loc_x, loc_y+1, m, n, dp)

        dp[loc_x][loc_y] = count

        return count

【问题讨论】:

  • 变量和函数名称应遵循lower_case_with_underscores 样式。 if 语句周围的括号是不必要的(我建议使用某种 linter,它们很棒)。返回值 0 和 1 表示什么意思?

标签: java python


【解决方案1】:

dp = [[0]*(n+1)]*(m+1) 不是在 Python 中定义二维列表的正确方法。改用这个:dp = [[0]*(n+1) for _ in range(m+1)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2016-08-02
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    相关资源
    最近更新 更多