leetcode73矩阵置零

暴力解法

思路

  • 先记录为零的行列,以防置零后有误
  • 选择四个方向,循环为零的行和列,设置另外的值为1,判断循环零前后左右的条件,循环行时行不得超过r,列时不得超过c

复杂度

  • 时间都为O(r*c)
  • 空间O(r+c)

代码

class Solution(object):
        def setZeroes(self,matrix):
            r,c=len(matrix),len(matrix[0])
            arr=[[1,0],[0,1],[-1,0],[0,-1]]
            arr1=[]
            arr2=[]
            for i in range(len(matrix)):
                for j in range(len(matrix[0])):
                    if matrix[i][j]==0:
                        arr1.append(i)
                        arr2.append(j)
            for k in range(len(arr1)):
                for l in range(4):
                    if l%2==0:
                        e=1
                        while 0 <= arr1[k]+e*arr[l][0] < r and 0 <= arr2[k]+e*arr[l][1] <= c :
                            a=arr1[k]+e*arr[l][0]
                            b=arr2[k]
                            matrix[a][b]=0
                            e+=1
                    else:
                        e=1
                        while 0 <= arr1[k]+e*arr[l][0] <= r and 0 <= arr2[k]+e*arr[l][1] < c :
                            b=arr2[k]+e*arr[l][1]
                            a=arr1[k]
                            matrix[a][b]=0
                            e+=1
            return matrix

官方解法

思路

  • 将为零的行列都在row和col中标记出来
  • 将行或列中有零的那一行或者那一列置零
  • 巧在设置row和col对应的False列表

复杂度

同上

代码

class Solution(object):
        def setZeroes(self,matrix):
            r,c=len(matrix),len(matrix[0])
            row,col=[False]*r,[False]*c
            for i in range(r):
                for j in range(c):
                    if matrix[i][j]==0:
                        row[i]=True
                        col[j]=True
            for i in range(r):
                for j in range(c):
                    if row[i] or col[j]:
                        matrix[i][j]=0
            return matrix
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值