顺时针打印矩阵
来源:互联网 发布:java贴吧 编辑:程序博客网 时间:2024/06/17 05:48
题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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 ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> result = new ArrayList<>(); // 结果的最大长度(二位数组长度) int maxCount = matrix.length*matrix[0].length; // 当前结果的长度,用来判断二维数组中的值是否已经全部在结果中 int count = 0; // 当前已经放了 几行/几列 数据在结果中 // 即从上往下数放了row行,从下往上数放了row行,从左往右数放了col列,从右往左放了col列 int row=0,col=0; // 循环放入 while (count < maxCount){ // 依次代表上、右、下、左的数组下标移位 int i,j,k,l; // 先从左到右放入上面一行 for(i = col; i < matrix[0].length-col; i++) { result.add(matrix[row][i]); count++; } // 放完即判断是否已经全部放入,下同 if(count >= maxCount) break; // 再从上到下放人右边的一列 for(j = row+1; j < matrix.length-row; j++){ result.add(matrix[j][i-1]); count++; } if(count >= maxCount) break; // 再从右到左放入下面的一行 for(k = matrix[0].length-1-col-1; k >= col; k--){ result.add(matrix[j-1][k]); count++; } if(count >= maxCount) break; // 再从下到上放人左边的一列 for(l = matrix.length-1-row-1; l >= row+1; l--){ result.add(matrix[l][k+1]); count++; } if(count >= maxCount) break; // 如果成功放完一圈,行数和列数各加一 row++; col++; } return result; }
呕心沥血写出来的,转载请一定注明出处!
阅读全文
0 0
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 矩阵顺时针打印
- 顺时针打印矩阵
- 顺时针打印矩阵[算法]
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- 顺时针打印矩阵
- SQL复杂查询练习
- 图像增强:频域
- 解决getWriter() has already been called for this response异常
- 【主席树】BZOJ3524(Poi2014)[Couriers]题解
- shiro真正项目中的实战应用核心代码!!!
- 顺时针打印矩阵
- 450. Delete Node in a BST
- 第一篇博文
- .net 使用 [Ajax.AjaxMethod()]方法
- P2P原理及UDP穿透简单说明
- kendo ui grid 合計
- 选择屏幕——按钮、单选复选框
- 解决Android Studio编译后安装apk报错:The APK file does not exist on disk
- 捉住一只小白