试图通过索引解决python中的双列表增量问题
我正在尝试解决这个问题。这是leet代码1252。 基本上你有一个矩阵和索引。 假设你有一个矩阵试图通过索引解决python中的双列表增量问题,python,arrays,Python,Arrays,我正在尝试解决这个问题。这是leet代码1252。 基本上你有一个矩阵和索引。 假设你有一个矩阵 0 0 0 0 0 0 你有一个索引 0 1 1 1 索引的左侧是哪些行值增加一,右侧是哪些列值增加一 那么,将0行乘以1,将1行乘以,得到 1 1 1
0 0 0
0 0 0
你有一个索引
0 1
1 1
索引的左侧是哪些行值增加一,右侧是哪些列值增加一
那么,将0行乘以1,将1行乘以,得到
1 1 1
1 1 1
1 2 1
1 2 1
1 3 1
1 3 1
然后你看索引的左边,这意味着你把1列增加1,把1列增加1,得到
1 1 1
1 1 1
1 2 1
1 2 1
1 3 1
1 3 1
我试图用下面的代码来解决这个问题
def matrix(n,m,index):
nums=[[0]*m]*n
print(nums)
a=len(nums)
b=len(nums[0])
for i in range(a):
c=index[i][0]
print("the value of c is ",c)
for j in range(b):
nums[c][j]=nums[c][j]+1
print(nums)
for j in range(a):
c=index[1][j]
print(c)
for i in range(a):
nums[i][c]=nums[i][c]+1
print(nums)
index=[[0,1],[1,1]]
n=2
m=3
matrix(n,m,index)
但我最终得到了
2 6 2
2 6 2
供我输入
0 0 0
0 0 0
奇怪的是,尝试相同的代码并得到正确的答案
def inc(nums):
print(nums)
a=len(nums)
b=len(nums[0])
for i in range(a):
c=index[i][0]
for j in range(b):
nums[c][j]=nums[c][j]+1
print(nums)
for j in range(a):
c=index[1][j]
print(c)
for i in range(a):
nums[i][c]=nums[i][c]+1
print(nums)
a=[[0,0,0],[0,0,0]]
index=[[0,1],[1,1]]
inc(a)
正确答案是
1 3 1
1 3 1
不要立即更新矩阵,而是为行更改和列更改创建两个列表,并用零初始化 遍历索引列表并更改行和列列表: 最初
r = [0,0] , c = [0,0,0]
index -> 0 1
r = [1,0] , c = [0,1,0]
index -> 1 1
r = [1,1] , c = [0,2,0]
然后,最后,用行列表中的相应值和列列表中的相应值递增每一行
这也是一个优化的解决方案
这是我的密码:
n = 2
m = 3
index = [[0,1],[1,1]]
mat = [[0 for i in range(m)] for j in range(n)]
r = [0 for i in range(n)]
c = [0 for i in range(m)]
for ri,ci in index:
r[ri]+=1
c[ci]+=1
for i in range(n):
mat[i] = [r[i]]*m
for i in range(m):
if c[i]>0:
for j in range(n):
mat[j][i] += c[i]
print(mat)
输出:
[[1, 3, 1],
[1, 3, 1]]
请修复代码和数据示例中不一致的缩进。第一个代码块定义了一个从未使用过的函数(
矩阵
)。好的,让我来修复它。我认为现在第一个代码块仍然定义了一个从未使用过的函数(矩阵
)。