IMWeb提升营Day4 | 训练题19:顺时针打印矩阵
来源:互联网 发布:中国家居建材 知乎 编辑:程序博客网 时间:2024/05/21 14:54
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
思路
/* * 思路:用左上和右下的坐标定位出一次要旋转打印的数据,一次旋转打印结束后,往对角分别前进和后退一个单位。 * 提交代码时,主要注意问题出在没有控制好后三个for循环,需要加入条件判断,防止出现单行或者单列的情况。 */class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { int row = matrix.size(); int col = matrix[0].size(); vector<int> result; //输入的二维数组为空,返回空 if(row == 0 || col == 0) return result; //特殊情况处理 if(row == 1 && col == 1){ result.push_back(matrix[0][0]); return result; } if(row == 1){ for(int i = 0; i < col; i++){ result.push_back(matrix[0][i]); } return result; } if(col == 1){ for(int i = 0; i < row; i++){ result.push_back(matrix[i][0]); } return result; } //定义四个关键变量,表示左上和右下的打印范围 int left = 0, top = 0, right = col - 1, bottom = row - 1; while(left <= right && top <= bottom){ //向右 for(int i = left; i <= right; i++) result.push_back(matrix[top][i]); //向下 if(top == bottom) break;//最内圈的判断,防止内圈只有一行或一列 for(int i = top + 1; i <= bottom; i++) result.push_back(matrix[i][right]); //向左 if(right == left) break;//最内圈的判断,防止内圈只有一行或一列 for(int i = right - 1; i >= left; i--) result.push_back(matrix[bottom][i]); //向上 if(top == bottom) break;//最内圈的判断,防止内圈只有一行或一列 for(int i = bottom - 1; i > top; i--) result.push_back(matrix[i][left]); //每过一圈改变一下四个范围变量 left++, top++, right--, bottom--; } return result; }};
阅读全文
0 0
- IMWeb提升营Day4 | 训练题19:顺时针打印矩阵
- IMWeb提升营Day4 | 训练题22:从上往下打印二叉树
- IMWeb提升营Day4
- IMWeb提升营Day4 | 训练题20:包含min函数的栈
- IMWeb提升营Day4 | 训练题21:栈的压入、弹出序列
- IMWeb提升营Day4 | 训练题23:二叉搜索树的后序遍历序列
- IMWeb提升营Day4 | 训练题24:二叉树中和为某一值的路径
- IMWeb提升营 —Day4
- 面试训练顺时针打印矩阵
- IMWeb小白训练营DAY4任务
- IMWeb提升营Day1 | 训练题3:从尾到头打印链表
- 19、顺时针打印矩阵
- IMWeb提升营Day1 | 训练题2:字符串空格替换
- IMWeb提升营Day1 | 训练题4:重建二叉树
- IMWeb提升营Day2 | 训练题8:跳台阶
- IMWeb提升营Day2 | 训练题9:变态跳台阶
- IMWeb提升营Day2 | 训练题10:矩形覆盖
- IMWeb提升营Day3 | 训练题15:反转链表
- 嵌入式C语言编程规范(转载)
- 类实现Serializable接口进行序列化和反序列化操作
- 汇编语言常用指令
- Android多线程----异步消息处理机制之Handler详解
- 一周入门Kotlin(三)
- IMWeb提升营Day4 | 训练题19:顺时针打印矩阵
- bzoj1770[Usaco2009 Nov]lights 燈 高斯消元
- AR移动应用开发(三) Unity与Android的Back键冲突解决
- SpringMVC学习笔记(六):如何返回数据
- Ubuntu16.04安装IntelCaffe(根据官方文档)
- 不需要额外空间的交换函数的弊端
- mybatis-映射器-insert元素,update,delete元素
- 【VBA】单元格合并思路
- 为什么要配置环境变量?