【剑指Offer】顺时针打印矩阵
发布日期:2022-02-10 08:55:12 浏览次数:13 分类:技术文章

本文共 1511 字,大约阅读时间需要 5 分钟。

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.

思路

主要是得画图把顺序理解清楚,详细画图见书上说明。

注意三种特殊情况,即最后一圈到底是打印几次。

思路2

  1. 向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up 加一,同时判断是否和代表下边界的 down 交错
  2. 向下走存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 right 减一,同时判断是否和代表左边界的 left 交错
  3. 向左走存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 down 减一,同时判断是否和代表上边界的 up 交错
  4. 向上走存入整列的值,当存入后,该列再也不会被遍历,代表左边界的 left 加一,同时判断是否和代表右边界的 right 交错

思路3

转矩阵
1.吸收第一行,并将第一行从矩阵中去掉,2.将矩阵“变相转置”(这里的转置可以理解为将矩阵从地上立起来,比如矩阵是【【1,2,3】, 【4,5,6】】 将它“变相转置”(立起来)为 【【3,6】,【2,5】,【1,4】】 )3.重复以上两步,直到将第一行去掉之后矩阵为空。

代码

class Solution {public:
vector  res;
vector  printMatrix(vector  > matrix) {
if(matrix.size() == 0){
return res;
}
int rows = matrix.size();
int columns = matrix[0].size();
int start = 0;
while(rows > start*2 && columns > start*2){
printMatrixCircle(matrix,start);
start++;
}
return res;
}
void printMatrixCircle(vector  > matrix,int start){
int rows = matrix.size();
int columns = matrix[0].size();
int endx = columns-1-start;
int endy = rows-1-start;
for(int i = start;i <= endx;i++){
res.push_back(matrix[start][i]);
}
if(start
for(int i = start + 1;i <= endy;i++){
res.push_back(matrix[i][endx]);
}
}
if(start
for(int i = endx-1;i >= start;i--){
res.push_back(matrix[endy][i]);
}
}
if(start
for(int i = endy-1;i >= start+1;i--){
res.push_back(matrix[i][start]);
}
}
}};

 

转载地址:https://blog.csdn.net/hanmin822/article/details/105526976 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【剑指Offer】复杂链表的复制
下一篇:【剑指Offer】数组中重复的数字

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2023年03月23日 13时27分15秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

C/C++整理 2019-12-15 02:39:25
抽象工厂实例理解 2019-12-15 02:39:25
博客2-部分容器以及泛型 2019-12-15 02:39:25
HTTP-TCP总结 2019-12-15 02:39:23
Typescript笔记 2019-12-15 02:39:23
angular入门 2019-12-15 02:39:23
Git知识总结 2019-12-15 02:39:23
react 入门看这个就够了 2019-12-15 02:39:24
vue 官方文档 - 自定义事件 2019-12-15 02:39:24
采坑记-读取本地图片 2019-12-15 02:39:22
mouseenter、mouseleave、mouseover、mouseout理解 2019-12-15 02:39:22
centos6.8安装docker 2019-12-15 02:39:22
Vuex分模块使用 2019-12-15 02:39:22
Vuex中getters动态获取state的值 2019-12-15 02:39:22
vue中简单封装自己的json-editor 2019-12-15 02:39:22
Windows安装CentOS后,进行Python开发 2019-12-15 02:39:21
Windows安装SSH连接远程服务器以及文件下载 2019-12-15 02:39:21
小白入门Vuex 2019-12-15 02:39:21
【最新】小白通过nginx部署vue项目到CentOS 2019-12-15 02:39:21
npm(你怕吗) 全局安装与本地安装、开发依赖和生产依赖 2019-12-15 02:39:21