leetcode:set-matrix-zeroes(Java

タイトル説明

m * n行列が与えられ、1つの要素が0の場合、要素が配置されている行と列のすべての要素を0に設定し、インプレースアルゴリズムを使用する必要があります。

展開:

あなたのアルゴリズムは余分なスペースを使用していますか?

より簡単なアルゴリズムはO(m、n)スペースを使用することですが、これは良い解決策ではありません

簡単な改善を使用すると、O(m + n)空間でこの問題を解決できますが、まだ最善の解決策ではありません。

一定レベルのスペースの複雑さの中でこの問題を解決できますか?

 

アイデア:元の配列と同じ長さと幅の補助配列fuzu [] []を設定します。そして、すべての要素を0に初期化し、マトリックス配列を行ごと、列ごとにスキャンし、要素が0の場合は、同じ位置にある補助配列要素を1に割り当てます。補助配列をスキャンした後、いずれかの要素が1の場合、対応する位置にある行列配列の行と列のすべての要素が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