LT
编程
Echarts
Python
Django
HTML
MySQL
Java
读书
电影
日常闲聊
计划表
搜索
登录
剑指offer之顺序打印数组
日期: 2020/11/09
作者:
longtao
分类:
编程
阅读: 77
## 算法的要求为: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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. ## 解题的思路为: 要求顺时针打印矩阵,打印的顺序为 - 顶部一行(从左到右) - 右侧一列(从上到下) - 底部一行(从右到左) - 左侧一行(从下到上) 具体的打印矩阵的顺序为如下图所示:  ## 遇到的问题 我之前在写这个算法的过程中遇到了无法完整打印矩阵与数组指针越界的问题,我在仔细思考过后,发现时没有正确的处理在`while`循环过程中的跳出操作。 其实应该在每一个for循环过后都要进行判断,判断`left>right`或者`up>down`,如果为`true`,则说明矩阵已经打印完成,应该跳出`while`循环。 ## 代码的实现 ```java import java.util.ArrayList; public class Solution { public ArrayList<Integer> printMatrix(int [][] matrix) { ArrayList<Integer> arr = new ArrayList<>(); if(matrix.length == 0 || matrix == null || matrix[0].length == 0) return arr; int up = 0, left = 0; int right = matrix[0].length-1, down=matrix.length-1; while(true){ // 最上面的一行代码进行遍历 for(int i=left; i<=right; i++){ arr.add(matrix[up][i]); } up ++; if(up > down) break; //遍历最左边的一列 for(int i=up; i<=down; i++){ arr.add(matrix[i][right]); } right --; if(left > right) break; //遍历最底部一行 for(int i=right; i>= left; i--){ arr.add(matrix[down][i]); } down --; if(up >down) break; //遍历最左侧一列 for(int i=down; i>= up; i--){ arr.add(matrix[i][left]); } left ++; if(left > right) break; } return arr; } } ```
网站名称:
刘龙韬的博客
本文链接:
www.liulongtao.com/aritcle/27
版权声明:
未经允许,禁止转载!
相关文章:
上一篇:
认真的学习中
下一篇:
剑指offer之打印超过数组一半的数字
提交评论
提交评论
评论列表
共有0评论
×
回复留言
回复评论:
评论内容:
昵称:
邮箱:
评论内容:
目录
最新文章
原码、反码与补码的基础内容
剑指offer之找到第一个公共节点
剑指offer之平衡二叉树
Docker 虚拟化技术
剑指offer之打印二叉搜索树中第k小的结点
分类
编程 (11)
读书 (0)
电影 (0)
日常闲聊 (2)
Echarts (2)
Python (5)
杂七杂八 (2)
Django (5)
HTML (2)
MySQL (1)
计划表 (1)
Java (2)
标签
Git (1)
vscode (1)
Echarts (2)
Python (10)
Django (6)
网站测试 (1)
MySQL (2)
HTML (2)
日常计划 (2)
java (2)
Spring Boot (2)
各种派 (1)
研究生的日常 (2)
算法 (5)
Java (5)
计算机基础 (2)
碎碎念 (0)
共有0评论