题目描述

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]

示例 2:

输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

解题思路

首先判断要打印的矩阵外圈左上角元素坐标是否满足条件。通过观察可得,左上角元素的横坐标和纵坐标的两倍应分别小于总行数和总列数,即row*2<rows且col*2<cols。然后判断打印边界情况,可以得到最右边的列索引为cols-col-1,同理最下边的行索引为rows-row-1,考虑按以下顺序打印并检查:

  • 从左上角元素开始,打印第一行到最右列;
  • 从第二行最右列元素开始,打印最后一列到最下行;
  • 若最下边的行索引不与第一行重合,则从最下行的倒数第二列元素开始,打印元素到第一列;
  • 若最左边的行索引不与最右边重合,则从第一列的倒数第二行元素开始,打印到第二行停止

代码

 class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> v;
if(matrix.empty())
return v;
int rows=matrix.size(),cols=matrix[].size();
int row=,col=;
while(row*<rows&&col*<cols){
int rl=rows-row-,cl=cols-col-;
for(int i=col;i<=cl;i++)
v.push_back(matrix[row][i]);
for(int i=row+;i<=rl;i++)
v.push_back(matrix[i][cl]);
if(rl!=row){
for(int i=cl-;i>=col;i--)
v.push_back(matrix[rl][i]);
}
if(cl!=col){
for(int i=rl-;i>row;i--)
v.push_back(matrix[i][col]);
}
row++;col++;
}
return v;
}
};

LeetCode 54. 螺旋矩阵(Spiral Matrix) 剑指offer-顺时针打印矩阵的更多相关文章

  1. 剑指Offer 顺时针打印矩阵

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

  2. 剑指OFFER——顺时针打印矩阵

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

  3. 剑指offer - 顺时针打印矩阵 - JavaScript

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

  4. 剑指Offer顺时针打印矩阵

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

  5. 剑指Offer_Java_顺时针打印矩阵(二维数组)

    顺(逆)时针打印矩阵 算法思想: 简单来说,就是不断地收缩矩阵的边界 定义四个变量代表范围,up(初始0).down(初始-行高).left(初始-0).right(初始-列宽), 向右走存入整行的值 ...

  6. 剑指Offer-19.顺时针打印矩阵(C++/Java)

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

  7. 剑指offer--26.顺时针打印矩阵

    1,2,3,45,6,7,88,10,11,1213,14,15,16 每次输出第一行,然后删除第一行,逆时针旋转剩下的矩阵. ------------------------------------ ...

  8. 剑指Offer18 顺时针打印矩阵

    /************************************************************************* > File Name: 18_PrintM ...

  9. python剑指offer 顺时针打印指针

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

  10. 用js刷剑指offer(顺时针打印数组)

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

随机推荐

  1. 记一些云服务器上部署koa2项目遇到的问题

    云服务器系统版本centos7.2,部署的项目koa2,node版本: 10.16.0 一.pm2的一些问题 1.安装pm2: npm install -g pm2 2.建立软链接,使pm2能全局使用 ...

  2. vue开大主要难点解决方式

    问题:在我们那vue开发项目时,多层嵌套组件最繁琐,组件传参成最难的问题,并且对兄弟组件传参也无能为力,也会导致代码很难维护. 解决:采用vuex状态管理,把所有的事件和状态都储存在store对象中, ...

  3. Linux--Shell 编程-bash,命令替换,if分支嵌套,运算,输入输出

    SHELL 编程     shell 是一个命令解释器,侦听用户指令.启动这些指令.将结果返回给用户(交互式的shell)     shell 也是一种简单的程序设计语言.利用它可以编写一些系统脚本. ...

  4. lightinthebox 批量设置分类产品排列方式为List、Grid、Gallery

    lightinthebox 批量设置分类产品排列方式为Grid categories_type = '1'表示List,2表示Grid,3表示Gallery方式 设置单个分类 ; ; ; 设置全部 ' ...

  5. 【HEOI2015】小Z的房间

    题意 https://www.luogu.org/problemnew/show/P4111 题解 前置知识:矩阵树定理 不要问证明,我不会,用就完事了(反正一般也不会用到) 因为矩阵树定理就是求一张 ...

  6. CUDA升级后

    打开工程文件.vcxproj,找到 <Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 10.0.props" ...

  7. repo 回退当前分支下所有仓库到指定日期前的最新代码版本

    回退命令: repo forall -c 'commitID=git log --before "2019-11-24 23:59" -1 --pretty=format:&quo ...

  8. java多线程之生产者消费者模型

    public class ThreadCommunication{ public static void main(String[] args) { Queue q = new Queue();//创 ...

  9. django 路由层(反向解析)03

    目录 ORM表关系建立 Django请求生命周期流程图 urls.py 路由层 无名分组 有名分组 反向解析 无名分组的反向解析 有名分组的反向解析 以编辑功能为例 路由分发 名称空间 伪静态 虚拟环 ...

  10. mysql 8.0.18 mgr 搭建及其切换

    mysql 8.0.18 mgr 搭建及其切换 一.系统安装包 yum -y install make gcc-c++ cmake bison-devel ncurses-devel readline ...