- 将二维数组遍历,得到非零数据的个数
- 创建对应的稀疏数组
- 遍历二维数组,把非零元素存入稀疏数组
- 输出稀疏数组
- 先取稀疏数组的第一行,根据第一行先把二维数组还原
- 再读取稀疏数组后几行的数据,填入二维数组
package com.nick.sparseaarry;
import java.util.*;
public class SparesArry {
public static void main(String[] args) {
//创建一个11*11棋盘,0:无子,1:黑子,2:白子
int chessArrl[][] = new int[11][11];//棋盘
//落子
chessArrl[5][5] = 1;
chessArrl[6][5] = 2;
chessArrl[4][5] = 1;
//打印原始棋盘
System.out.println("打印原始棋盘");
for (int[] row : chessArrl) {
for (int data : row) {
System.out.printf("%dt", data);
}
System.out.println();
}
//1.将二维数组遍历,得到非零数据的个数
int sum = 0;//非零元素个数
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArrl[i][j] != 0)
sum++;
}
}
//2.创建对应的稀疏数组
int spareArry[][] = new int[sum + 1][3];
spareArry[0][0] = 11;
spareArry[0][1] = 11;
spareArry[0][2] = sum;
int count = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (chessArrl[i][j] != 0) {
count++;
spareArry[count][0] = i;//|row|
spareArry[count][1] = j;//|col|
spareArry[count][2] = chessArrl[i][j];//|value|
}
}
}
//输出稀疏数组
System.out.println();
System.out.println("稀疏数组是:");
for (int i = 0; i < spareArry.length; i++) {
System.out.printf("%dt%dt%dtn", spareArry[i][0], spareArry[i][1], spareArry[i][2]);
}
System.out.println();
//1.先取稀疏数组的第一行,根据第一行先把二维数组还原
int chessArrl2[][] = new int[spareArry[0][0]][spareArry[0][1]];
//2.再读取稀疏数组后几行的数据,填入二维数组
for (int i = 1; i < spareArry.length; i++) {
chessArrl2[spareArry[i][0]][spareArry[i][1]] = spareArry[i][2];
}
System.out.println();
System.out.println("还原后的二维数组:");
for (int[] row : chessArrl2) {
for (int data : row) {
System.out.printf("%dt", data);
}
System.out.println();
}
}
}
https://www.bilibili.com/video/BV1E4411H73v



