二维数组的压缩与还原
public class ArrayTurn {
public static int [][] arrayTurn(int [][] arr){
int sum = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(arr[i][j] == 0) {
continue;
}else {
sum +=1 ;
}
}
}
System.out.println("二维数组共:" + arr.length + " 行, " + arr[1].length + " 列," +sum + " 个非空元素");
int [][] newarr = new int [sum+1][3];
newarr[0][0] = arr.length;
newarr[0][1] = arr[1].length;
newarr[0][2] = sum;
int count = 0;
for (int j = 0; j < arr.length; j++) {
for (int k = 0; k < arr[j].length; k++) {
if (arr[j][k] != 0) {
count++;
newarr[count][0] = j;
newarr[count][1] = k;
newarr[count][2] = arr[j][k];
}else {
continue;
}
}
}
return newarr;
}
public static int [][] arrayBack(int [][] arr){
int [][] newarr = new int [arr[0][0]][arr[0][1]];
for (int i = 0; i < arr[0][2]; i++) {
newarr[arr[i+1][0]][arr[i+1][1]] = arr[i+1][2];
}
return newarr;
}
public static void main(String[] args) {
int [][] arr = {{1,0,0,1},{0,2,0,0},{5,0,0,1}};
System.out.println("原始二维数组....");
for (int[] is : arr) {
for (int is2 : is) {
System.out.print(is2 + " ");
}
System.out.println();
}
int [][] newarr = arrayTurn(arr);
System.out.println("------分割线-------");
System.out.println("输出稀疏数组:");
for (int i = 0; i < newarr.length; i++) {
for (int j = 0; j < newarr[i].length; j++) {
System.out.print(newarr[i][j]+",");
}
System.out.println();
}
int [][] oriarr = arrayBack(newarr);
System.out.println("------分割线2-------");
System.out.println("稀疏数组还原:");
for (int i = 0; i < oriarr.length; i++) {
for (int j = 0; j < oriarr[i].length; j++) {
System.out.print(oriarr[i][j]+",");
}
System.out.println();
}
}
}