前言:
而今朋友们对“java打印二维数组”大概比较讲究,各位老铁们都想要知道一些“java打印二维数组”的相关内容。那么小编在网上收集了一些有关“java打印二维数组””的相关知识,希望同学们能喜欢,小伙伴们一起来了解一下吧!输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:
[[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
依次打印出数字
[1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]
第一种解法,首先打印第一行的数据,打印最后一列数据,打印最后一行数据,最后打印第一列数据,这样就完成了矩阵最外面的数据,里面的二维数组是一个新的矩阵,可以套用外面的解法,使用递归来解决,但是遇到只有一列数据或者只有一行数据的时候,得考虑特殊处理。代码如下
public static ArrayList<Integer> firstPrintMatrix(int [][] matrix) { ArrayList<Integer> list = new ArrayList<>(); if(null == matrix || matrix.length < 1){ return null; } print(matrix,list); return list; } public static ArrayList<Integer> print(int [][] matrix,ArrayList<Integer> list){ //行 4 int row = matrix.length; //列 1 int col = matrix[0].length; if(row ==1 || col == 1){ for (int i = 0 ; i < row; i++){ for (int j =0 ; j < col ;j++){ list.add(matrix[i][j]); } } }else { //第一行 行不变,列变化 for (int i = 0; i < col; i++){ list.add(matrix[0][i]); } //最后一列 行变化,列不变 for (int i = 1; i < row; i++){ list.add(matrix[i][col-1]); } //最后一行,行不变,列变化 for (int i = col-2; i > -1; i--){ list.add(matrix[row-1][i]); } //第一列,行变化,列不变 for (int i = row-2; i > 0; i--){ list.add(matrix[i][0]); } } if (row - 2 > 0 && col - 2 > 0) { //构造新的二维数组 int array[][] = new int[row - 2][col - 2]; for (int i = 1; i <= row - 2; i++) { for (int j = 1; j <= col - 2; j++) { array[i - 1][j - 1] = matrix[i][j]; } } print(array,list); } return list; }
第二种解法,和第一种类似,但是实现逻辑不一样,还是先遍历最外围的数据,然后往内收缩,重新创建一个四边形,代码如下
public static ArrayList<Integer> secondPrintMatrix(int [][] matrix) { ArrayList<Integer> list = new ArrayList<>(); if(null == matrix || matrix.length < 1){ return null; } int top = 0; //行 int bottom = matrix.length; int left = 0; //列 int right = matrix[0].length; while (top < bottom && left < right){ //第一行 行不变,列变化 for (int i = left; i < right ;i++){ list.add(matrix[top][i]); } //最后一列 行变化,列不变 for (int i = top+1; i < bottom; i++){ list.add(matrix[i][right-1]); } //最后一行,行不变,列变化 for(int i=right-2;i>=left&&bottom-1!=top;i--){ list.add(matrix[bottom-1][i]); } for(int i=bottom-2;i>top&&right-1!=left;i--){ list.add(matrix[i][left]); } top++; bottom--; left++; right--; } return list;}
完整代码如下
public class MainPrintMatrix { public static void main(String[] args) { //int [][]array = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; int [][]array = {{1},{2},{3},{4}}; //int [][]array = {{1,2},{3,4}}; ArrayList<Integer> integers = firstPrintMatrix(array); System.out.println("integers = " + integers); } public static ArrayList<Integer> firstPrintMatrix(int [][] matrix) { ArrayList<Integer> list = new ArrayList<>(); if(null == matrix || matrix.length < 1){ return null; } print(matrix,list); return list; } public static ArrayList<Integer> print(int [][] matrix,ArrayList<Integer> list){ //行 4 int row = matrix.length; //列 1 int col = matrix[0].length; if(row ==1 || col == 1){ for (int i = 0 ; i < row; i++){ for (int j =0 ; j < col ;j++){ list.add(matrix[i][j]); } } }else { //第一行 行不变,列变化 for (int i = 0; i < col; i++){ list.add(matrix[0][i]); } //最后一列 行变化,列不变 for (int i = 1; i < row; i++){ list.add(matrix[i][col-1]); } //最后一行,行不变,列变化 for (int i = col-2; i > -1; i--){ list.add(matrix[row-1][i]); } //第一列,行变化,列不变 for (int i = row-2; i > 0; i--){ list.add(matrix[i][0]); } } if (row - 2 > 0 && col - 2 > 0) { //构造新的二维数组 int array[][] = new int[row - 2][col - 2]; for (int i = 1; i <= row - 2; i++) { for (int j = 1; j <= col - 2; j++) { array[i - 1][j - 1] = matrix[i][j]; } } print(array,list); } return list; } public static ArrayList<Integer> secondPrintMatrix(int [][] matrix) { ArrayList<Integer> list = new ArrayList<>(); if(null == matrix || matrix.length < 1){ return null; } int top = 0; //行 int bottom = matrix.length; int left = 0; //列 int right = matrix[0].length; while (top < bottom && left < right){ //第一行 行不变,列变化 for (int i = left; i < right ;i++){ list.add(matrix[top][i]); } //最后一列 行变化,列不变 for (int i = top+1; i < bottom; i++){ list.add(matrix[i][right-1]); } //最后一行,行不变,列变化 for(int i=right-2;i>=left&&bottom-1!=top;i--){ list.add(matrix[bottom-1][i]); } for(int i=bottom-2;i>top&&right-1!=left;i--){ list.add(matrix[i][left]); } top++; bottom--; left++; right--; } return list; }}
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #java打印二维数组