欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

力扣刷题8---零矩阵

程序员文章站 2022-04-15 23:39:33
题目编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。力扣出处面试金典示例 1:输入:[ [1,1,1], [1,0,1], [1,1,1]]输出:[ [1,0,1], [0,0,0], [1,0,1]]示例 2:输入:[ [0,1,2,0], [3,4,5,2], [1,3,1,5]]输出:[ [0,0,0,0], [0,4,5,0], [0,3,1,0]]解析个人的想法是遍历矩阵中的每一个元素...

题目

编写一种算法,若M × N矩阵中某个元素为0,则将其所在的行与列清零。

力扣出处面试金典

示例 1

输入:
[
  [1,1,1],
  [1,0,1],
  [1,1,1]
]
输出:
[
  [1,0,1],
  [0,0,0],
  [1,0,1]
]
示例 2

输入:
[
  [0,1,2,0],
  [3,4,5,2],
  [1,3,1,5]
]
输出:
[
  [0,0,0,0],
  [0,4,5,0],
  [0,3,1,0]
]

解析

个人的想法是遍历矩阵中的每一个元素,如果遇到0的时候只要将所在元素的这一行这一列分别置为0即可,但是需要注意不能基于原矩阵进行修改,不然的话会修改错误,因为这样的话0的数量会增加。

代码

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int r = matrix.size();
        int c = matrix[0].size();
        vector<vector<int>> Newmatrix = matrix;  
        //不能基于原矩阵进行修改,不然的话会修改错误,因为这样的话0的数量会增加

        for(int i = 0; i < r; i++)
            for(int j = 0; j < c; j++)
            {
                if(matrix[i][j] == 0)
                {
                    for(int m = 0; m < r; ++m)
                    {
                        Newmatrix[m][j] =0;
                    }
                    for(int n=0; n < c; ++n)
                    {
                        Newmatrix[i][n] = 0;
                    }
                }
            }
        matrix = Newmatrix;
    }
};

力扣刷题8---零矩阵

本文地址:https://blog.csdn.net/weixin_44378800/article/details/107349152