稀疏数组转换的思路分析及代码
代码:
package org.example; public class sparseArray { public static void main(String[] args) { //先创建一个原始的二维数组 11*11 //0:表示没有棋子 1表示黑子 2表示蓝子 int chessArr1[][] = new int[11][11]; chessArr1[1][2] = 1; chessArr1[2][3] = 2; chessArr1[4][5] = 2; //输出原始数组 for (int[] row : chessArr1) { for (int data:row){ System.out.printf("%d\t",data); } System.out.println(); } //将二维数组转换为稀疏数组 int sum = 0;//有效数据 for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if(chessArr1[i][j]!=0){ sum++; } } } System.out.println(sum); //创建对应的稀疏数组 int sparseArr[][] = new int[sum+1][3]; //给稀疏数组赋值 sparseArr[0][0]=11; sparseArr[0][1]=11; sparseArr[0][2]=sum; //遍历二维数组,将非0值存放到稀疏数组中 int count=0;//用于记录是第几行 for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if(chessArr1[i][j]!=0){ count++; sparseArr[count][0]=i; sparseArr[count][1]=j; sparseArr[count][2]=chessArr1[i][j]; } } } System.out.println(); System.out.println("---得到的稀疏数组"); for (int i = 0; i < sparseArr.length; i++) { System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]); } System.out.println(); //将稀疏数组恢复为二维数组 //先读取稀疏数组第一行数据 根据第一行创建二维数组 int chessArr2[][] =new int[sparseArr[0][0]][sparseArr[0][1]]; //从第二行开始遍历,将非0数据赋二维数组 for (int i = 1; i < sparseArr.length; i++) { chessArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2]; } for (int[] row : chessArr2) { for (int data:row){ System.out.printf("%d\t",data); } System.out.println(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现