题目链接

https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题意

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

示例 1:

输入:

[

[ 1, 2, 3 ],

[ 4, 5, 6 ],

[ 7, 8, 9 ]

]

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

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/spiral-matrix

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路(方法二)(思路较优)

  • 记录矩阵当前上下左右边界,并维护。
  • 步骤:放入矩阵第一行,更新矩阵上边界,判断若上边界>下边界则完成矩阵遍历;放入矩阵最后一列...

代码(方法二)

class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ansList = new ArrayList<>();
if (matrix == null || matrix.length == 0) {
return ansList;
} // 定义上下左右边界
int l = 0;
int up = 0;
int r = matrix[0].length - 1;
int down = matrix.length - 1;
while (true) {
// 第一行
for (int i = l; i <= r; ++i) {
ansList.add(matrix[up][i]);
}
if (++up > down) {
break;
} // 最后一列
for (int i = up; i <= down; ++i) {
ansList.add(matrix[i][r]);
}
if (--r < l) {
break;
} // 最后一行
for (int i = r; i >= l; --i) {
ansList.add(matrix[down][i]);
}
if (--down < up) {
break;
} // 第一列
for (int i = down; i >= up; --i) {
ansList.add(matrix[i][l]);
}
if (++l > r) {
break;
}
}
return ansList;
}
}

解题思路(方法一)

用子矩阵的左上角和右下角代表子矩阵,循环打印子矩阵,打印子矩阵的最外圈。

循环最外圈时,先判子矩阵只剩一行/一列的情况。

代码(方法一)

import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
int lR=0;
int lC=0;
int rR=matrix.length-1;
int rC=matrix[0].length-1;
int size=matrix.length*matrix[0].length;
ArrayList<Integer> circleAL=new ArrayList<Integer>(size);//
while(lR<=rR&&lC<=rC){
printCircle(matrix,lR++,lC++,rR--,rC--,circleAL);//
}
return circleAL;
} private void printCircle(int[][] matrix,int lR,int lC,int rR,int rC,ArrayList<Integer> circleAL){
if(lR==rR){
for(int j=lC;j<=rC;++j){
circleAL.add(matrix[lR][j]);//
}
}
else if(lC==rC){
for(int i=lR;i<=rR;++i){
circleAL.add(matrix[i][lC]);
}
}
else{
int i=lR;
int j=lC;
while(j!=rC){
circleAL.add(matrix[i][j]);
++j;
}
while(i!=rR){
circleAL.add(matrix[i][j]);
++i;
}
while(j!=lC){
circleAL.add(matrix[i][j]);
--j;
}
while(i!=lR){
circleAL.add(matrix[i][j]);
--i;
}
}
}
}

[剑指Offer]29-顺时针打印矩阵-Java的更多相关文章

  1. 剑指 Offer 29. 顺时针打印矩阵 + 蛇形矩阵 + 模拟 + 思维题

    剑指 Offer 29. 顺时针打印矩阵 Offer_29 题目描述: 题解分析: 题目的初衷是将这道题当做一个简单题处理 这道题一开始想的太复杂了,其实可以参考迷宫广度优先搜索的过程,只不过在选定一 ...

  2. 剑指 Offer 29. 顺时针打印矩阵

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

  3. 力扣 - 剑指 Offer 29. 顺时针打印矩阵

    题目 剑指 Offer 29. 顺时针打印矩阵 思路1 其实就是按照理解题目的意思一步步从外层到内层打印出来,同时将一个外层分成四个部分分步打印 可以用一个变量count来维护当前打印的第几层 判断打 ...

  4. 【Java】 剑指offer(29) 顺时针打印矩阵

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思 ...

  5. 剑指offer——29顺时针打印矩阵

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

  6. [剑指offer] 29. 顺时针打印矩阵 (for循环条件)

    思路: 先定义左上和右下角点坐标,打印可分为从左到右,从上到下,从右到左,从下到上.依次判断最后一圈的四个循环条件. #include "../stdafx.h" #include ...

  7. 《剑指offer》顺时针打印矩阵

    本题来自<剑指offer> 顺时针打印矩阵 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 1 ...

  8. 【剑指Offer】顺时针打印矩阵 解题报告(Python)

    [剑指Offer]顺时针打印矩阵 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...

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

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

  10. 剑指offer得意之作——顺时针打印矩阵

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

随机推荐

  1. Java spring实现文件下载

    一,实现目的,后台写一个controller,然后前台页面点击文件下载,实现文件下载功能.(文件是存放于服务器的磁盘上的) @RequestMapping("/filesdownloads& ...

  2. msf help.

    root@Debian:~# msfconsole [-] ***rtiNg the Metasploit Framework console...- [-] * WARNING: No databa ...

  3. php 关于laravel5.7框架

    一.配置 首先说下配置,安装node.js  .npm .cmd 命令行 node -v  .npm -v 若已安装出现版本号,若无自行百度 安装compaser 通过compaser命令安装lara ...

  4. struct 对齐和补齐原则

    // 对齐原则:每一成员需对齐为后一成员类型的倍数 // 补齐原则:最终大小补齐为成员类型最大值的倍数 struct A {  int a;     // 4  short b;   // (4) + ...

  5. C语言博客作业6---结构体&文件

    C语言博客作业6---结构体&文件 1.本章学习总结(2分) 1.1思维导图 请以思维导图总结本周的学习内容.如下图所示: 1.2.学习体会 描述本周学习感受,也可以在这里提出你不理解地方.对 ...

  6. Google推出了Python最牛逼的编辑器

    环境配置对于大多数人来说都是拦路虎,我们小白往往不知道: 怎么正确的安装 不知道选择什么 怎么安装常用的第三方库 ... Google推出了一个在线的网站 https://colab.research ...

  7. 装python package 时,conda提示会升级python2到python3,那可能是你的windows不支持py2env下的此包。

    装python package 时,conda提示会升级python2到python3, 那可能是你的windows不支持py2env下的此包.比如:win 下,tensorflow就不支持py2的环 ...

  8. fdisk 分区及 swap

    使用虚拟机创建挂载点 一,创建 windows 硬盘        创建  

  9. 【jira】java.lang.OutOfMemoryError: GC overhead limit exceeded

    登录JIRA访问打开缓慢,查询日志出现下述提示:java.lang.OutOfMemoryError: GC overhead limit exceeded 修改setenv.sh文件中的JVM配置, ...

  10. 用原生js简单模仿angular的依赖注入

    大家都知道angular 依赖注入很神奇,跟我们平常写代码的风格思维差别很大,不过仔细分析确是一个很有意思的东西,依赖注入早期也叫依赖倒置,是java中有的.废话不多少直接上例子 本帖属于原创,转载请 ...