73. 矩阵置零

最后都变了- 提交于 2019-12-28 15:57:47

链接

题目.

难度:

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%
的用户

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!