タイトル説明
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;
}
}
}
}