清除行列

来源:互联网 发布:mac微信文件保存位置 编辑:程序博客网 时间:2024/05/22 02:26

题目描述

请编写一个算法,若MxN矩阵中某个元素为0,则将其所在的行与列清零。
给定一个MxN的int[][]矩阵(C++中为vector>)mat和矩阵的阶数n,请返回完成操作后的int[][]矩阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内。
测试样例:
[[1,2,3],[0,1,2],[0,0,1]]
返回:[[0,0,3],[0,0,0],[0,0,0]]

思路:遍历二维数组,记录值为0的行号、列好,,然后根据行号、列号,逐位清零

C/C++实现

用到动态数组声明并初始化,,

class Clearer {public:    vector<vector<int> > clearZero(vector<vector<int> > mat, int n) {        // write code here        //bool row[n];        //bool colum [n];        if(mat.empty())             return vector<vector<int> >();        int len1=mat.size();        int len2=mat[0].size();        bool *row=new bool[len1]();//切记声明后一定要加小括号初始化,否则报错!!        bool *colum =new bool[len2]();        for (int i=0;i<len1;i++)            for(int j=0; j<len2;j++){            if(mat[i][j]==0)                {                row[i]=true;                colum[j]=true;            }        }        for (int i=0;i<len1;i++)            for(int j=0; j<len2;j++){            if(row[i] || colum[j] ){                mat[i][j]=0;             }        }        delete [] row;        delete [] colum ;        return mat;    }};

Java实现

Java实现相对较为简单

import java.util.*;public class Clearer {    public int[][] clearZero(int[][] matrix, int n) {        // write code here             boolean[] row = new boolean[n];               boolean[] column = new boolean[n];          for (int i = 0; i < matrix.length; i++)          {              for (int j = 0; j < matrix[0].length; j++)              {                  if (matrix[i][j] == 0)                  {                      row[i] = true;                      column[j] = true;                  }              }          }          for (int i = 0; i < matrix.length; i++)          {              for (int j = 0; j < matrix[0].length; j++)              {                  if(row[i] || column[j])                  {                      matrix[i][j] = 0;                  }              }          }        return matrix ;    }}
0 0
原创粉丝点击