二维数组和稀疏数组之间的相互转换

直接上代码,代码有详细注释,跟着代码一步一步走so easily的了。

package test.llb.arry;

/*
 * 二维数组转稀疏数组,以及稀疏数组转二维数组
 * LLB  2019.11.13
 */

public class SparseArry {

	public static void main(String[] args) {
		//-----------------------------二维数组转稀疏数组--------------------------------------
		//定义一个9*9的二维数组
		int arry[][] = new int[9][9];
		//给数组赋值   随便赋几个值
		arry[1][5] = 1;
		arry[2][1] = 2;
		arry[6][7] = 1;
		//打印输出下这个二维数组
		System.err.println("原始二维数组:");
		for (int[] is : arry) {
			for (int i : is) {
				System.err.print(i);
				System.err.print("  ");
			}
			System.err.println();
		}
		//将二维数组转换成稀疏数组
		//获取二维数组列数和行数
		int rows = 0;//行数
		int columns = 0;//列数
		int count = 0;//二维数组有效个数
		int count1 = 0;//记录稀疏数组行数
		for (int[] is : arry) {
			columns = is.length;//行数
			rows++;//列数
		}
		//获取二维数组有效元素
		for (int[] is : arry) {
			for (int i : is) {
				if (i != 0) {
					count++;
				}
			}
		}
		//定义一个稀疏数组,行数等于二维数组有效元素个数+1,列数等于3固定的
		int sparseArry[][] = new int[count+1][3];
		//给稀疏数组赋值
		//稀疏数组第一行值分别为 第一列值为二维数组的行数,第二列值二维数组的列数,第三列值为二维数组有效元素个数
		sparseArry[0][0] = rows;
		sparseArry[0][1] = columns;
		sparseArry[0][2] = count;
		//之后的每一行元素值分别为:第一列值为二维数组元素所在的行数,第二列值为二维数组元素的列数,第三列为元素的值
		//循环遍历二维数组获取每一个元素的下标
		for(int i = 0; i<rows;i++){
			for (int j = 0; j < columns; j++) {
				if (arry[i][j] != 0) {
					count1++;//自增记录每一行
					sparseArry[count1][0] = i;
					sparseArry[count1][1] = j;
					sparseArry[count1][2] = arry[i][j];
				}
			}
		}
		
		//输出稀疏数组
		System.err.println("二维数组转换成稀疏数组:");
		for (int[] is : sparseArry) {
			for (int i : is) {
				System.err.print(i+"  ");
			}
			System.err.println();
		}
		
		//-----------------------------稀疏数组转二维数组-------------------------
		//获取稀疏数组第一行第一列和第一行第二列的值,该值就为二维数组的行数和列数
		//定义二维数组
		int arry1[][] = new int[sparseArry[0][0]][sparseArry[0][1]];
		//循环稀疏数组给二维数组赋值,稀疏数组第一行以后的每一行中的第一列代表二维数组元素的行下标,第二列代表二维数组元素的列下标,第三列代表二维数组的元素值
		for (int i = 1; i < sparseArry[0][2]+1; i++) {
			arry1[sparseArry[i][0]][sparseArry[i][1]] = sparseArry[i][2];
		}
		//转换后的二维数组:
		System.err.println("转换后的二维数组:");
		for (int[] is : arry1) {
			for (int i : is) {
				System.err.print(i+"  ");
			}
			System.err.println();
		}

	}

}

加油程序员们,让我们用代码改变世界

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值