【剑指offer】面试题29:顺时针打印矩阵
来源:互联网 发布:淘宝1920全屏轮播代码 编辑:程序博客网 时间:2024/05/17 06:06
完整代码地址
完整代码地址
题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,
例如,如果输入如下矩阵:
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 class _29_PrintMatrix { public ArrayList<Integer> printMatrix(int [][] matrix) { if(matrix == null || matrix.length == 0 || matrix[0] == null || matrix[0].length == 0) return null; ArrayList<Integer> list = new ArrayList<>(); int row = matrix.length - 1; // 未遍历的行下标最大值 int col = matrix[0].length - 1; // 未遍历的列下标最大值 // start表示未遍历的行/列下标的最小值 for(int start = 0; start <= row && start <= col; ++start, --row, --col) { for(int i = start; i <= col; ++i) { // 上 list.add(matrix[start][i]); } for(int i = start + 1; i <= row; ++i) { // 右 list.add(matrix[i][col]); } if(start < row) { for(int i = col - 1; i >= start; --i) { // 下 list.add(matrix[row][i]); } } if(start < col) { for(int i = row - 1; i > start; --i) { // 左 list.add(matrix[i][start]); } } } return list; }}
测试
public class _29_Test { public static void main(String[] args) { test1(); test2(); test3(); } /** * 数组有多行多列 */ private static void test1() { _29_PrintMatrix pm = new _29_PrintMatrix(); int[][] arr = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; System.out.println(pm.printMatrix(arr)); arr = new int[][]{ {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}, {13,14,15} }; System.out.println(pm.printMatrix(arr)); } /** * 边界测试 * 1.数组只有一行 * 2.数组只有一列 * 3.数组只有一行一列 */ private static void test2() { _29_PrintMatrix pm = new _29_PrintMatrix(); System.out.println(pm.printMatrix(new int[][] {{1,2,3,4}})); System.out.println(pm.printMatrix(new int[][] {{1}, {2}, {3}, {4}})); System.out.println(pm.printMatrix(new int[][] {{1}})); } /** * 极端测试 * 1.二维数组为null * 2.二维数组第一维度有0个元素 * 4.二维数组第二维度为null * 3.二维数组第二维度为0个元素 */ private static void test3() { _29_PrintMatrix pm = new _29_PrintMatrix(); System.out.println(pm.printMatrix(null)); System.out.println(pm.printMatrix(new int[0][])); System.out.println(pm.printMatrix(new int[6][])); System.out.println(pm.printMatrix(new int[3][0])); }}
阅读全文
0 0
- 《剑指offer》面试题:顺时针打印矩阵
- 剑指offer面试题 顺时针打印矩阵
- 顺时针打印矩阵(剑指offer面试题29)
- 【剑指offer】面试题 29:顺时针打印矩阵
- 剑指offer--面试题29:顺时针打印矩阵
- 【剑指offer】面试题29:顺时针打印矩阵
- 剑指offer面试题20顺时针打印矩阵
- [剑指offer][面试题20]顺时针打印矩阵
- 剑指offer 面试题20:顺时针打印矩阵
- 《剑指offer》面试题20顺时针打印矩阵
- 【剑指offer】面试题20:顺时针打印矩阵
- 剑指offer 面试题20 顺时针打印矩阵
- 剑指Offer:面试题20 顺时针打印矩阵
- 《剑指Offer》面试题20:顺时针打印矩阵
- 剑指offer 面试题20—顺时针打印矩阵
- 《剑指Offer》学习笔记--面试题20:顺时针打印矩阵
- 剑指offer--面试题20:顺时针打印矩阵--Java实现
- 【剑指Offer学习】【面试题20 : 顺时针打印矩阵】
- 创建用户、角色、赋权限等命令
- C++ 双线性插值缩放图像
- scala 随笔(1) 懒加载lazy 详细说明
- 牛顿法解非线性方程组
- Excel 技巧百例:对比两列数据,然后根据数据升降给出相关标识
- 【剑指offer】面试题29:顺时针打印矩阵
- 最小费用最大流模板
- 【四方向型】虚拟摇杆unity布局
- hdu 4587(tarjan)
- Java_基础—File类练习
- BZOJ4328 始祖鸟 [高斯消元][bitset?没听说过。。]
- 【数据】Marvell 88W8801 WiFi模块的固件数据
- 数据结构导论(第一遍导图)
- c#输入三个数,打印出中间的数值