题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 
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.
解析:注意循环结束的条件:顺时针打印就是按圈数循环打印,一圈包含两行或者两列,在打印的时候会出现某一圈中只包含一行,
要判断从左向右打印和从右向左打印的时候是否会出现重复打印,同样只包含一列时,要判断从上向下打印和从下向上打印的时候是否会出现重复打印的情况
思想:用左上和右下的坐标定位出一次要旋转打印的数据,一次旋转打印结束后,往对角分别前进和后退一个单位。
    提交代码时,主要的问题出在没有控制好后两个for循环,需要加入条件判断,防止出现单行或者单列的情况。
步骤:
/*
* 1.选坐标为(0,0),(1,1)...的点记为(start,start)为开始坐标,下一圈开始坐标为(start+1,start+1)
* 2.判断是否进入下一圈(即是否打印完成)的条件是row>start*2 && column>start*2
* 3.打印一圈的左上角坐标为(start,start),右下角的坐标为(column-start-1,row-start-1)
* 4.根据一圈左上角和右下角坐标判断“从左到右”,“从上到下”,“从右到左”,“从下到上”哪些用打印,哪些不用
*/
#include <iostream>
#include <vector>using namespace std;vector<int> printMatrix(vector<vector<int> > matrix)
{vector<int> res;if (matrix.size() == 0) return res;int cols = matrix[0].size();int rows = matrix.size();if (cols <= 0 || rows <= 0) return res;int start = 0;while (cols > start * 2 && rows > start * 2){int endX = cols - 1 - start;int endY = rows - 1 - start;//从左到右for (int i = start; i <= endX; i++)res.push_back(matrix[start][i]);//从上到下if (endY > start){for (int i = start + 1; i <= endY; i++)res.push_back(matrix[i][endX]);}//从右到左if (endY > start&&endX > start){for (int i = endX - 1; i >= start; i--)res.push_back(matrix[endY][i]);}//从下到上if (endY > start + 1 && endX > start){for (int i = endY - 1; i >= start + 1; i--)res.push_back(matrix[i][start]);}start++;}return res;
}int main()
{vector<vector<int> > matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };vector<int> res = printMatrix(matrix);for (auto num : res)cout << num << " ";cout << endl;system("pause");return 0;
}

顺时针打印矩阵(旋转矩阵)相关推荐

  1. 剑指offer-python:27.旋转矩阵and顺时针打印矩阵and逆时针打印

    旋转矩阵是顺时针打印矩阵的前提.首先,学会旋转矩阵,后面就容易了. 1.旋转矩阵:如下所示,旋转效果 [[1,2,3], [[7,4,1],[4,5,6], ---> [8,5,2],[7,8, ...

  2. python顺时针打印矩阵_python实现顺时针打印矩阵

    面试题之顺时针打印矩阵,Python实现,供大家参考,具体内容如下 问题描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,输入如下矩阵: 则依次打印出数字1,2,3,4,8, ...

  3. 顺时针打印矩阵(编程题讲解)

    顺时针打印矩阵 题目描述 题目分析 python代码 使用python矩阵的旋转 矩阵的转置代码 python旋转矩阵解法代码    <剑指offer> 编程题讲解. 题目描述    输入 ...

  4. python将矩阵顺时针旋转90度_python实现顺时针打印矩阵

    面试题之顺时针打印矩阵,Python实现,供大家参考,具体内容如下 问题描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,输入如下矩阵: 则依次打印出数字1,2,3,4,8, ...

  5. 剑指offer:面试题29. 顺时针打印矩阵

    题目:顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9 ...

  6. 【剑指offer】顺时针打印矩阵

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...

  7. 剑指offer十九之顺时针打印矩阵

    一.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...

  8. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java

    <LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...

  9. 【剑指offer-Java版】20顺时针打印矩阵

    顺时针打印矩阵:重在理解,毕竟作者分析的那个方法看起来还是蛮复杂的-所以自己写了个接地气的方法 重在逻辑的一个题,一次性完全写对还是比较困难的 public class _Q20 {public vo ...

最新文章

  1. 找不到可安装的ISAM”的问题
  2. MySQL下载与配置
  3. 网工基础测试题(附HCIA题库)
  4. python3的 time库的使用
  5. extjs多选下拉树
  6. 用conda安装虚拟的R环境
  7. KNN实现CIFAR-10数据集识别
  8. 博主已开启评论精选什么意思_小白必看!想要成为小红书博主,首先要掌握4个工具!...
  9. 3月第一周中国五大顶级域名增6万 美国增1.8万
  10. 贺利坚老师汇编课程51笔记:MUL乘法指令
  11. webapp开发技术选型
  12. Java中几种高性能的队列
  13. doubango编码及发送流程的疑惑
  14. 最优化方法——Newton方法
  15. JavaScript函数重载(js函数重载)
  16. 3D游戏引擎技术剖析
  17. 2022年数学建模C题优秀论文
  18. 大数据技能大赛题目(高职组,模块C和D)
  19. 新冠疫情对AI技术发展的影响
  20. 【优化理论与方法】图解法

热门文章

  1. win10更新服务打开后为什么服务拒绝访问
  2. 亚马逊婴儿围栏CPC认证标准要求
  3. go语言中flag库使用
  4. dfema规则_六步搞定DFMEA表格
  5. Java面试知识总结(带基础)
  6. html怎么设置图片宽高比,CSS力图像调整尺寸和保持高宽比
  7. 【自学笔记】尚硅谷数据结构与算法Chapter 3 链表
  8. 未来五年数控切割机重点发展方向
  9. 逗号表达式java_9_三目运算符和逗号表达式
  10. 简析Acrel-1000安科瑞变电站综合自动化系统选型与应用