Java中事先不确定数组长度如何处理?数独场景实现示例
未知数组长度时的Java实现方案
适配你当前知识储备的优化方案
你当前的两次遍历写法本身逻辑清晰,对于固定9*9大小的数独场景来说,性能完全达标,可以正常使用。如果想要改成单次遍历实现,利用数独棋盘最多81个位置的特性,可以先创建最大容量的临时数组存储坐标,遍历结束后截取有效部分即可:
int[][] mutable() { // 数独棋盘最大容量为81,提前创建临时数组 int[][] temp = new int[81][2]; int count = 0; for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[i].length; j++) { if (board[i][j] == 0) { temp[count][0] = i; temp[count][1] = j; count++; } } } // 手动拷贝有效部分生成结果数组 int[][] mutable = new int[count][2]; for (int k = 0; k < count; k++) { mutable[k] = temp[k]; } return mutable; }
通用场景解决方案
等你后续学习到Java集合框架后,处理未知长度的元素序列可以直接使用ArrayList这类动态集合,无需提前预估容量,集合会自动实现扩容,代码更简洁:
import java.util.ArrayList; import java.util.List; int[][] mutable() { List<int[]> zeroPositions = new ArrayList<>(); for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[i].length; j++) { if (board[i][j] == 0) { zeroPositions.add(new int[]{i, j}); } } } // 集合转换为数组返回 return zeroPositions.toArray(new int[0][]); }
内容的提问来源于stack exchange,提问作者Nothing special
相关产品推荐
相关产品推荐

