leetcode:set-matrix-zeroes(Java实现)

题目描述

给定一个m*n的矩阵,如果有一个元素是0,就把该元素所在的行和列上的元素全置为0,要求使用原地算法。

拓展:

你的算法有使用额外的空间吗?

一种比较直接的算法是利用O(m,n)的空间,但是这不是一个好的解法

使用简单的改进可以在O(m+n)的空间解决这个问题,但是还不是最佳的解法

你能在常量级的空间复杂度内解决这个问题吗?

思路:设置一个辅助数组fuzu[][],长度和宽度和原数组一样。并将所有元素初始化为0,逐行逐列依个扫描matrix数组,若有元素为0则将相同位置的辅助数组元素赋值为1。之后扫描一遍辅助数组若有元素为1则将对应位置的matrix数组的所在行和所在列所有元素赋为0。

Java特殊用法:Arrays.fill()方法,这里不详细阐述。

import java.util.Arrays;
public class Solution {
    public void setZeroes(int[][] matrix) {
          int i,j;

    //获取二维数组的长和宽
        int height=matrix.length;
        int width=matrix[0].length;

        int fuzu[][]=new int[height][width];
        for(i=0;i<height;i++)
            Arrays.fill(fuzu[i],0);

        for(i=0;i<height;i++)
            for(j=0;j<width;j++){
                if(matrix[i][j]==0)
                    fuzu[i][j]=1;
            }
        for(i=0;i<height;i++)
            for(j=0;j<width;j++){
                if(fuzu[i][j]==1){
                    for(int n=0;n<width;n++)
                        matrix[i][n]=0;
                    for(int m=0;m<height;m++)
                        matrix[m][j]=0;
                }
            }
    }
}

猜你喜欢

转载自blog.csdn.net/Zhongtongyi/article/details/107294930