當咱們在處理如五子棋這類棋盤問題時,只有棋盤中的黑子和白字位置對於咱們來講是由具體意義的,當一個二維數組中的絕大多數值都是某一個值時,咱們選定位默認值,咱們可使用稀疏數組來保存,以達到節約空間的目的java
public class SparseArray { public int[][] array2SparseArray(int[][] res){ int n=0; for(int i=0;i<res.length;i++) { for(int j=0;j<res[i].length;j++) { if(res[i][j]!=0) { n++; } } } int[][] tar=new int[n+1][3]; tar[0][0]=res.length; tar[0][1]=res[0].length; tar[0][2]=n; int row=1; for(int i=0;i<res.length;i++) { for(int j=0;j<res[i].length;j++) { if(res[i][j]!=0) { tar[row][0]=i; tar[row][1]=j; tar[row][2]=res[i][j]; row++; } } } return tar; } public static void main(String[] args) { int[][] res=new int[4][5]; res[1][2]=1; res[0][3]=2; res[2][0]=1; res[2][2]=1; SparseArray sa=new SparseArray(); sa.print(res); int[][] tar = sa.array2SparseArray(res); sa.print(tar); } public void print(int[][] res) { for(int i=0;i<res.length;i++) { for(int j=0;j<res[i].length;j++) { System.out.print(res[i][j]+" "); } System.out.println(); } } } 輸出: 0 0 0 2 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 4 5 4 0 3 2 1 2 1 2 0 1 2 2 1
public class SparseArray { public int[][] array2SparseArray(int[][] res){ int n=0; for(int i=0;i<res.length;i++) { for(int j=0;j<res[i].length;j++) { if(res[i][j]!=0) { n++; } } } int[][] tar=new int[n+1][3]; tar[0][0]=res.length; tar[0][1]=res[0].length; tar[0][2]=n; int row=1; for(int i=0;i<res.length;i++) { for(int j=0;j<res[i].length;j++) { if(res[i][j]!=0) { tar[row][0]=i; tar[row][1]=j; tar[row][2]=res[i][j]; row++; } } } return tar; } public int[][] sparseArray2Array(int[][] res){ int rows=res[0][0]; int cols=res[0][1]; int n=res[0][2]; int[][] tar=new int[rows][cols]; for(int i=1;i<=n;i++) { int row=res[i][0]; int col=res[i][1]; int val=res[i][2]; tar[row][col]=val; } return tar; } public static void main(String[] args) { int[][] res=new int[4][5]; res[1][2]=1; res[0][3]=2; res[2][0]=1; res[2][2]=1; SparseArray sa=new SparseArray(); sa.print(res); int[][] tar = sa.array2SparseArray(res); sa.print(tar); int[][] res2 = sa.sparseArray2Array(tar); sa.print(res2); } public void print(int[][] res) { for(int i=0;i<res.length;i++) { for(int j=0;j<res[i].length;j++) { System.out.print(res[i][j]+" "); } System.out.println(); } } } 輸出: 0 0 0 2 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 4 5 4 0 3 2 1 2 1 2 0 1 2 2 1 0 0 0 2 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0