73. 矩阵置零

链接

题目.

难度:

middle

解答:

要想不使用额外空间,那么就需要将标志位设在原来的数据上面,这里就把第一行和第一列用来存储改行或者该列是否有0 的标志,这样原来是否是0就被覆盖了,所以需要两个标志记录下来

package main

import "fmt"

func setZeroes(matrix [][]int) {
	if len(matrix) == 0 {
		return
	}

	rows, cols := len(matrix), len(matrix[0])
	rowZero, colZero := false, false
	for i := 0; i < rows; i++ {
		if matrix[i][0] == 0 {
			rowZero = true
			break
		}
	}

	for j := 0; j < cols; j++ {
		if matrix[0][j] == 0 {
			colZero = true
			break
		}
	}

	for i := 1; i < rows; i++ {
		for j := 1; j < cols; j++ {
			if matrix[i][j] == 0 {
				matrix[i][0] = 0
				matrix[0][j] = 0
			}
		}
	}

	for i := 1; i < rows; i++ {
		if matrix[i][0] == 0 {
			for j := 1; j < cols; j++ {
				matrix[i][j] = 0
			}
		}
	}

	for j := 1; j < cols; j++ {
		if matrix[0][j] == 0 {
			for i := 1; i < rows; i++ {
				matrix[i][j] = 0
			}
		}
	}

	if rowZero {
		for i := 0; i < rows; i++ {
			matrix[i][0] = 0
		}
	}

	if colZero {
		for j := 0; j < cols; j++ {
			matrix[0][j] = 0
		}
	}
}
func main() {
	matrix := [][]int{
		{0, 1, 2, 0},
		{3, 4, 5, 2},
		{1, 3, 1, 5},
	}

	setZeroes(matrix)
	fmt.Println(matrix)
}


复杂度分析

time

O(m*n)

space

O(1)

执行结果

执行用时 :
32 ms
, 在所有 golang 提交中击败了
6.45%
的用户
内存消耗 :
6.1 MB
, 在所有 golang 提交中击败了
100.00%
的用户

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值