public class Sparse { public static void main(String[] args) { // 稀疏數組的目的是爲了減少無意義的數組元素 /*0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0*/ // 將上述內容轉變成稀疏數組(本質是二維數組,我們可以看做一個矩陣如下) /* 11 11 2 (幾行幾列幾個有效數字) * 1 2 1 (哪一行哪一列的哪個數字) * 2 4 2 (哪一行哪一列的哪個數字) * */ int[][] arr = new int[11][11]; arr[1][2] = 1; arr[2][4] = 2; // 生成稀疏數組 int[][] sparseArr = new int[3][3]; int count = 0; // 拼湊sparseArr[0] sparseArr[0][0] = arr.length; sparseArr[0][1] = arr[0].length; for(int i = 0; i < arr.length; i++){ for(int j = 0; j < arr[0].length; j++){ if(arr[i][j] != 0){ count += 1; // 記錄有多少個有效數字(所以稀疏數組有count + 1行,3列) sparseArr[count][0] = i; sparseArr[count][1] = j; sparseArr[count][2] = arr[i][j]; } } } sparseArr[0][2] = count; // 打印一下驗證對不對 for(int p = 0; p < 3; p++){ System.out.println(sparseArr[p][0] + "\t" + sparseArr[p][1] + "\t" + sparseArr[p][2] + "\t"); } // -----------------還原稀疏數組 (補0) int[][] originArr = new int[sparseArr[0][0]][sparseArr[0][1]]; for(int i = 1; i <= sparseArr[0][2]; i++){ originArr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2]; } // 打印驗證 for(int[] x: originArr){ for(int y: x){ System.out.print(y+"\t"); } System.out.println(); } } }