System.out.println("-------------"); System.out.println("恢复后的二维数组"); //将稀疏数组 恢复成 原始的二维数组 int[][] chessArr2 = recover(sparseArr); for (int[] ints : chessArr2) { for (int anInt : ints) { System.out.print(anInt+"\t"); } System.out.println(); } } /** * 将二维数组 转 稀疏数组的思路 * 1、先遍历二维数组 得到非0数据的个数 * @param chessArray * @return */ publicstaticint[][] toSparseArray(int[][] chessArray){ //有效数的个数 int sum = 0; for (int i = 0; i < chessArray.length; i++) { for (int j = 0; j < chessArray.length;j++) { if (chessArray[i][j]!=0) { sum++; } } } //2、创建对应的稀疏数组 int sparseArr[][] = newint[sum+1][3]; //给稀疏数组赋值 sparseArr[0][0] = chessArray.length; sparseArr[0][1] = chessArray.length; sparseArr[0][2] = sum; //用于记录是第几个非0数 int count = 0; for (int i = 0; i < chessArray.length; i++) { for (int j = 0; j < chessArray.length;j++) { if (chessArray[i][j]!=0) { count++; sparseArr[count][0] = i; sparseArr[count][1] =j; sparseArr[count][2] = chessArray[i][j]; } } } return sparseArr; }
/** * 1、先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组 * 2、再读取稀疏数组后几行的数据,并赋值给 原始的二维数组 即可 * * @param sparseArr * @return */ publicstaticint[][] recover(int[][] sparseArr){ int row = sparseArr[0][0]; int col = sparseArr[0][1]; int validNum = sparseArr[0][2];
int chessArr2[][] = newint[row][col]; for (int i = 1;i<sparseArr.length;i++) { int chessRow = sparseArr[i][0]; int chessCol = sparseArr[i][1]; int chessVal = sparseArr[i][2]; chessArr2[chessRow][chessCol] = chessVal; } return chessArr2; }