您的位置:首页 > 编程语言 > Java开发

JAVA代码—算法基础:矩阵元素置零

2018-02-26 00:03 351 查看
[b]矩阵元素置零[/b]

问题描述:给定一个m*n的矩阵,如果某个位置是0。将对应的行和列设置为0。

算法设计:

package com.bean.algorithmbasic;

public class SettingZeroProblem {

/*
* 给定一个m*n的矩阵,如果某个位置是0。将对应的行和列设置为0。
* */

public static void main(String[] args) {

int[][] arrayDemo=new int[5][5];
for(int i=0;i<arrayDemo.length;i++) {
for(int j=0;j<arrayDemo[0].length;j++) {
arrayDemo[i][j]=(int)((Math.random())*10);
System.out.print(arrayDemo[i][j]+"\t");
}
System.out.println();
}

SettingZeroProblem szp=new SettingZeroProblem();
szp.setZeroes(arrayDemo);
System.out.println("--------------------------------");

for(int i=0;i<arrayDemo.length;i++) {
for(int j=0;j<arrayDemo[0].length;j++) {

System.out.print(arrayDemo[i][j]+"\t");
}
System.out.println();
}
}

public void setZeroes(int[][] matrix) {
int m = matrix.length;
int n = matrix[0].length;
int i, j;

//先标记第一行和第一列是否有0
boolean firstRow = false, firstCol = false;
for (j = 0; j < n; j++) {
if (0 == matrix[0][j]) {
firstRow = true;
break;
}
}
for (i = 0; i < m; i++) {
if (0 == matrix[i][0]) {
firstCol = true;
break;
}
}

//从第二行第二列还是遍历,如果遇到0,则把它所在行和列的第一个值设为0
for (i = 1; i < m; i++) {
for (j = 1; j < n; j++) {
if (0 == matrix[i][j]) {
matrix[i][0] = 0;
matrix[0][j] = 0;
}
}
}

//把第一列的0所在行都设为0,把第一行的0所在列都设为0
for (i = 1; i < m; i++) {
if (0 == matrix[i][0]) {
for (j = 1; j < n; j++) {
matrix[i][j] = 0;
}
}
}
for (j = 1; j < n; j++) {
if (0 == matrix[0][j]) {
for (i = 1; i < m; i++) {
matrix[i][j] = 0;
}
}
}

//根据标记决定第一行和第一列是否全设为0
if (firstRow) {
for (j = 0; j < n; j++) {
matrix[0][j] = 0;
}
}
if (firstCol) {
for (i = 0; i < m; i++) {
matrix[i][0] = 0;
}
}
}

}


(完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: