機器人位于 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
,即m
xn
矩陣。
這段代碼:
arr = [[0 for x in range(m)] for y in range(n)]
不等同于您的 C++ 代碼。它生成一個列表n
列表,每個列表都包含m
零,即n
xm
矩陣。因此你得到了錯誤。
添加回答
舉報
0/150
提交
取消