Java算法之矩阵中出现指定数字的同行同列数字清零

Posted 笔触狂放

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java算法之矩阵中出现指定数字的同行同列数字清零相关的知识,希望对你有一定的参考价值。

题目:指定阶数,生成随机数的矩阵,然后指定任意数字为目标,将出现该数字的所在的行和列进行所有数字全部清零

这里生成了10阶的矩阵,随机产生了100个数字,假设设定出现0数字的位置的行和列的数字全部清零,效果如下:

这些0所出现的位置的行和列都要清零,

最后的结果为:

题目意思我相信应该大家都清楚了,那么接下来看解题思路:

解题思路:
 * 1.定义两个一维数组,用于记录二维数组中出现0的位置的横纵坐标的位置,并把该位置赋值为1
 * 2.循环遍历两个一维数组,把记录横坐标的数组中的值为1的下标找出来,同步到二维数组上,把该下标对应的横坐标上全部清零
 * 3.把记录纵坐标的数组中的值为1的下标找出来,同步到二维数组上,把该下标对应的纵坐标上全部清零

代码如下:

package com.lqb;

import java.util.Random;
/**
 * 把二维数组中出现0的位置上的横向和纵向的数字都清零
 * 解题思路:
 * 1.定义两个一维数组,用于记录二维数组中出现0的位置的横纵坐标的位置,并把该位置赋值为1
 * 2.循环遍历两个一维数组,把记录横坐标的数组中的值为1的下标找出来,同步到二维数组上,把该下标对应的横坐标上全部清零
 * 3.把记录纵坐标的数组中的值为1的下标找出来,同步到二维数组上,把该下标对应的纵坐标上全部清零
 */
public class Test4_2 {

	private int[][] e = null;

	public static void main(String[] args) {
		new Test4_2().init(10, 10);
	}
	
	private void init(int row,int col) {
		e=new int[row][col];
		for (int i = 0; i < row; i++) {
			for (int j = 0; j < col; j++) {
				e[i][j]=new Random().nextInt(10);
			}
		}
		print();
	}

	private void print() {
		
		for (int i = 0; i < e.length; i++) {
			for (int j = 0; j < e.length; j++) {
				System.out.print(e[i][j]+" ");
			}
			System.out.println();
		}
		
		int[] rows=new int[e.length];
		int[] cols=new int[e[0].length];
		//通过循环找出二维数组中的出现0的位置的坐标,分别记录在不同的一位数组中
		for (int i = 0; i < cols.length; i++) {
			for (int j = 0; j < cols.length; j++) {
				if (e[i][j]==0) {
					rows[i]=1;
					cols[j]=1;
				}
			}
		}
		
		//在循环遍历两个数组,只要出现1的下标上都全部改为0
		for (int i = 0; i < cols.length; i++) {
			for (int j = 0; j < cols.length; j++) {
				if (rows[i]==1||cols[j]==1) {
					e[i][j]=0;
				}
			}
		}
		System.out.println();
		System.out.println();
		System.out.println();
		for (int i = 0; i < e.length; i++) {
			for (int j = 0; j < e.length; j++) {
				System.out.print(e[i][j]+" ");
			}
			System.out.println();
		}
	}

}

代码量比较少,算法题的重点还是在解题思路和策略上

在日常生活中也见过类似于这种效果的用途,比如开心消消乐的行列消除的效果:

如果这题大家没问题的话,那么看看能不能尝试做一下这题:创建任意阶数的矩阵,随机生成数字,出现0的横纵方向上不能修改,横纵方向上没有出现0的,将其所在位置的横纵方向的数字进行叠加

给定任意阶数的二维数组,10%概率生成0,90%概率非零,行和列上没有0的位置,将行和列上的所有值累加在一起

效果图如下:

结果为:

以上是关于Java算法之矩阵中出现指定数字的同行同列数字清零的主要内容,如果未能解决你的问题,请参考以下文章

2021.11.2测试-T1数独

获取java中矩阵中连续出现k次的所有数字

回溯法-N皇后问题-C++算法

面试之基础算法题:求一个数字在给定的已排序数组中出现的起始终止索引号(Java版)

Java算法之边界为1的最大子矩阵

excel同列中不能输入相同的数设置