首页 > 代码库 > 将矩阵中为0的元素所在行列清零

将矩阵中为0的元素所在行列清零

public class setZero {
	static void print(int [][]a){
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a[i].length;j++){
				System.out.print(a[i][j]+" ");
			}
			System.out.println();
		}
	}
	/*static void SetZero(int [][]a, int i, int j){
		for(int k=0; k<a.length;k++){
			a[i][k]=0;
		}
		for(int k=0; k<a[i].length;k++){
			a[k][j]=0;
		}
	}*/
	public static void main(String[] args) {
		int [][]a={ {1,2,3}, {4,0,5}, {6,7,8}};
		//方法1,用数组标记零元素的位置,空间复杂度O(MN)
		/*int [][]b = new int[3][3];*/
		
		//方法2,用两个数组分别标记零元素的行和列
		boolean []row=new boolean[a.length];
		boolean []col=new boolean[a[0].length];
		print(a);
		for(int i=0;i<a.length;i++){
			for(int j=0; j<a[i].length; j++){
				if(a[i][j]==0){
					/*b[i][j]=1;*/
					row[i]=true;
					col[j]=true;
				}
			}
		}
		/*for(int i=0;i<b.length;i++){
			for(int j=0;j<b[i].length;j++){
				if(b[i][j]==1){
					SetZero(a,i,j);
				}
			}
		}*/
		for(int i=0;i<a.length;i++){
			for(int j=0;j<a[i].length;j++){
				if(row[i] || col[j]){
					a[i][j]=0;
				}
			}
		}
		print(a);
	}
}
/*output example
1 2 3 
4 0 5 
6 7 8 

1 0 3 
0 0 0 
6 0 8 */