为了账号安全,请及时绑定邮箱和手机立即绑定

Python 和 C++ 二维数组初始化之间。这是什么 ?为什么?

Python 和 C++ 二维数组初始化之间。这是什么 ?为什么?

LEATH 2023-02-07 10:53:21
机器人位于 amxn 网格的左上角(在下图中标记为“开始”)。机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角(在下图中标记为“完成”)。有多少可能的唯一路径?我想出了解决方案,并用我的母语编程语言 C++ 编写了代码。class Solution {public:    int uniquePaths(int m, int n) {        vector<vector<int>> matrix(m, vector<int>(n, 0));        for (int i = 0; i < m; i++) {            matrix[i][0] = 1;        }        for (int j = 0; j < n; j++) {            matrix[0][j] = 1;        }        for(int i = 1; i < m; i++) {            for(int j = 1; j < n; j++) {                matrix[i][j] = matrix[i][j-1] + matrix[i-1][j];                            }        }        return matrix[m-1][n-1];    }};二维向量被初始化为arr[m][n]在学习 Python 时,我决定也用 Python 来解决它。我遇到了一个荒谬的问题。这里,arr = [[0 for x in range(n)] for y in range(m)] 我将二维数组初始化为arr = [[0 for x in range(m)] for y in range(n)] 而且,我得到的错误列表索引超出范围。我真的搞砸了从干草中找出这根针,但无论如何我明白了。你能解释一下为什么即使一切都一样,行和列之间也会发生这些冲突吗?class Solution:    def uniquePaths(self, m: int, n: int) -> int:        if m == 0 or n == 0:            return 0        arr = [[0 for x in range(n)] for y in range(m)]         for i in range(m):            arr[i][0] = 1        for j in range(n):            arr[0][j] = 1        for i in range(1,m):            for j in range(1,n):                arr[i][j] = arr[i][j-1] + arr[i-1][j]        return arr[m-1][n-1]    下面是题目链接供参考:Unique paths-leetcode
查看完整描述

1 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

在你的 C++ 代码中:

vector<vector<int>> matrix(m, vector<int>(n, 0));

您正在创建一个向量m向量,每个向量包含n初始化为 0 的元素。这就像一个由m行 xn列组成的二维矩阵。

Python 中的等效代码是:

arr = [[0 for x in range(n)] for y in range(m)]

这是一个列表理解。对于具有 C++ 背景的人来说,此语法从后往前看,但列表理解的格式是:

[ expression for item in list if conditional ]

0因此,在您的情况下,对于范围内的每个索引,m您都会创建一个包含零的内部列表n,即mxn矩阵。

这段代码:

arr = [[0 for x in range(m)] for y in range(n)]

不等同于您的 C++ 代码。它生成一个列表n列表,每个列表都包含m零,即nxm矩阵。因此你得到了错误。


查看完整回答
反对 回复 2023-02-07
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信