【发布时间】:2021-10-22 14:40:15
【问题描述】:
我是 Python 的初学者。以下是我对leetcode 221(最大平方)的代码,它只能通过30多个测试样本。它在矩阵中失败: M=[["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]。
def maximalSquare(matrix):
colleng=len(matrix)
rowleng=len(matrix[0])
maxsqlst=[]
dp=[[0]*rowleng]*colleng
for i in range(colleng):
for j in range(rowleng):
if matrix[i][j]=='1':
if i==0 or j==0:
print('A',i,j,dp)
dp[i][j]=1
print('B',i,j,dp)
else:
dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1
print(i,j,dp)
maxsqlst.append(max(dp[i]))
return max(maxsqlst)**2
通过插入一些print()命令,发现i=j=0时出错,
A 0 0 [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
B 0 0 [[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]].
为什么第一个列是 1 而不是 dp[0][0]?
【问题讨论】:
-
问题是什么?
-
感谢您的评论!当 i=j=0 时,我希望它只设置 dp[0][0] 为 1,但它实际上将 dp 的第一个列设置为 1。为什么会发生这种情况?@drum
标签: python dynamic-programming