代码示例
/*** 生成稀疏数组* @param arr 原数组* @param defaultValue 数组默认值* @return*/
static int[][] extractArray(int[][] arr, int defaultValue) {// 统计有多少个非默认值int count = 0;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {if(arr[i][j] != defaultValue){count++;}}}// 声明稀疏数组int[][] sparseArr = new int[count + 1][3];sparseArr[0][0] = arr.length;sparseArr[0][1] = arr[0].length;sparseArr[0][2] = count;// 向稀疏数组填入数据int index = 1;for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr[i].length; j++) {if(arr[i][j] != defaultValue){sparseArr[index][0] = i;sparseArr[index][1] = j;sparseArr[index][2] = arr[i][j];index++;}}}return sparseArr;
}/*** 稀疏数组还原为二维数组* @param arr 稀疏数组* @return*/
static int[][] sparseDilution(int[][] arr, int defaultValue) {int[][] dilutionArr = new int[arr[0][0]][arr[0][1]];// 先填充好默认值for (int i = 0; i < dilutionArr.length; i++) {for (int j = 0; j < dilutionArr[i].length; j++) {dilutionArr[i][j] = defaultValue;}}// 再解析出非默认值的坐标,覆盖值for (int i = 1; i < arr.length; i++) {dilutionArr[arr[i][0]][arr[i][1]] = arr[i][2];}return dilutionArr;
}/*** 打印二维数组* @param arr 二维数组*/
static void printArray(int[][] arr){for (int[] ints : arr) {for (int anInt : ints) {System.out.print("\t" + anInt);}System.out.println();}
}public static void main(String[] args) {// 定义原数组,五子棋盘15×15 0空1黑2白int[][] arr = new int[15][15];arr[7][7] = 1;arr[7][8] = 1;arr[8][8] = 2;arr[9][9] = 2;// 输出原数组System.out.println("原数组为:");printArray(arr);// 调用方法,生成稀疏数组int[][] sparseArr = extractArray(arr, 0);// 输出稀疏数组System.out.println("稀疏数组为:");printArray(sparseArr);// 调用方法,将稀疏数组还原为原数组int[][] dilutionArr = sparseDilution(sparseArr, 0);// 输出还原数组System.out.println("还原数组为:");printArray(dilutionArr);
}