博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】顺时针打印矩阵
阅读量:6991 次
发布时间:2019-06-27

本文共 1707 字,大约阅读时间需要 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.

题解

这个题目就是正常的模拟就好。

定义四个变量。
top: 表示最上面的行;
bottom:表示最小面的行;
left:表示最左边的列;
right: 表示最右边的列;

  1. 左 -> 右,这个时候相当于最上面这一行就打印完了,这个时候最上面的行top要++;
  2. 右 -> 下,这个时候相当于最右边这一列就打印完了,这个时候最右边的列right要--;
  3. 右 -> 左,这个时候相当于最下边这一行就打印完了,这个时候最下边的行bottom要--;
  4. 下 -> 上,这个时候相当于最左边这一列就打印完了,这个时候最左边的列left要--;

但是每一步完成之后可能都会遇到边界条件:

1 2 3 4

比如上面这个case,top++之后就应该跳出循环,不应该继续走了。

1234

再比如上面这个case,走到right--之后就应该跳出循环,不应该继续走了。

此外还要注意判断一下矩阵是null的情况。

import java.util.ArrayList;public class Solution {    public ArrayList
printMatrix(int [][] matrix) { if (matrix == null) return new ArrayList(); int top = 0; int bottom = matrix.length - 1; int left = 0; int right = matrix[0].length - 1; ArrayList
result = new ArrayList(); while (top <= bottom && left <= right) { for (int i = left; i <= right; i++) { result.add(matrix[top][i]); } top++; if (top > bottom) { break; } for (int i = top; i <= bottom; i++) { result.add(matrix[i][right]); } right--; if (left > right) { break; } for (int i = right; i >= left; i--) { result.add(matrix[bottom][i]); } bottom--; if (top > bottom) { break; } for (int i = bottom; i >= top; i--) { result.add(matrix[i][left]); } left++; if (left > right) { break; } } return result; }}

Leetcode名企之路

转载地址:http://vbzvl.baihongyu.com/

你可能感兴趣的文章
大数模版
查看>>
HDU4044 GeoDefense(树形dp+分组背包)
查看>>
Microsoft .Net Remoting系列专题之三:Remoting事件处理全接触
查看>>
JavaScript常用标签和方法总结
查看>>
GO语言的进阶之路-网络编程之socket
查看>>
作业—四则运算题目生成器
查看>>
第十四周翻译-《Pro SQL Server Internals, 2nd edition》
查看>>
jdbcUrl is required with driverClassName spring boot 2.0版本
查看>>
C# 关于JArray和JObject封装JSON对象
查看>>
【Visual C++】游戏开发笔记之十 基础动画显示(三) 透明动画的实现
查看>>
今目标反思
查看>>
SQL Server 备份的 8 种方法。
查看>>
SQL Server 从数据库快照还原数据库
查看>>
$(document).keydown
查看>>
对Java、C#转学swift的提醒:学习swift首先要突破心理障碍。
查看>>
面向对象 2017-4-15
查看>>
java项目导出war包
查看>>
算法第三章实践报告
查看>>
linux应用之Mongodb的安装及配置(centos)
查看>>
Python 面向对象 --- eval 函数
查看>>