[剑指Offer]29-顺时针打印矩阵-Java
题目链接
题意
给定一个包含 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的更多相关文章
- 剑指 Offer 29. 顺时针打印矩阵 + 蛇形矩阵 + 模拟 + 思维题
剑指 Offer 29. 顺时针打印矩阵 Offer_29 题目描述: 题解分析: 题目的初衷是将这道题当做一个简单题处理 这道题一开始想的太复杂了,其实可以参考迷宫广度优先搜索的过程,只不过在选定一 ...
- 剑指 Offer 29. 顺时针打印矩阵
剑指 Offer 29. 顺时针打印矩阵 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出: ...
- 力扣 - 剑指 Offer 29. 顺时针打印矩阵
题目 剑指 Offer 29. 顺时针打印矩阵 思路1 其实就是按照理解题目的意思一步步从外层到内层打印出来,同时将一个外层分成四个部分分步打印 可以用一个变量count来维护当前打印的第几层 判断打 ...
- 【Java】 剑指offer(29) 顺时针打印矩阵
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 思 ...
- 剑指offer——29顺时针打印矩阵
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数 ...
- [剑指offer] 29. 顺时针打印矩阵 (for循环条件)
思路: 先定义左上和右下角点坐标,打印可分为从左到右,从上到下,从右到左,从下到上.依次判断最后一圈的四个循环条件. #include "../stdafx.h" #include ...
- 《剑指offer》顺时针打印矩阵
本题来自<剑指offer> 顺时针打印矩阵 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 1 ...
- 【剑指Offer】顺时针打印矩阵 解题报告(Python)
[剑指Offer]顺时针打印矩阵 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题 ...
- 【剑指offer】顺时针打印矩阵
转载请注明出处:http://blog.csdn.net/ns_code/article/details/26053049 剑指offer上的第20题,九度OJ上測试通过. 题目描写叙述: 输入一个矩 ...
- 剑指offer得意之作——顺时针打印矩阵
题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3 ...
随机推荐
- react-redux笔记
用vuex来对比来说明 分类 vuex redux react-redux 写state commit mutation (mutable state) dispatch reducer (immut ...
- Django字符串翻译
文章出处:https://www.jb51.net/article/70077.htm Django模板使用两种模板标签,且语法格式与Python代码有些许不同. 为了使得模板访问到标签,需要将 {% ...
- Sping Cloud项目启动报A component required a bean of type 'com.tianyan.bbc.dao.SecurityUserBaseMapper' that could not be found.
项目构建正常,启动和Debug报以下错误: Error starting ApplicationContext. To display the conditions report re-run you ...
- Kafka安装及开启SASL_PLAINTEXT认证(用户名和密码认证)
前些日子要封装一个kafka的客户端驱动,配置了下kafka环境,发现配置复杂度完爆rabbitmq很多倍啊,而且发布订阅模式使用起来也很麻烦,可能就胜在分布式了吧. kafka需要java环境,自行 ...
- ct
b80e00u9dxwpqw7bt98rm5zmlxt08cxs A3WKXKBHWDUOEOP3EVJA2YRM6JSZPJWGTCQ5BSYAWI4GMSIXOAT2IQ
- SQL中的排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE)简介
排名函数是Sql Server2005新增的功能,下面简单介绍一下他们各自的用法和区别. 在使用排名函数的时候需要注意以下三点: 1.排名函数必须有 OVER 子句. 2.排名函数必须有包含 ORDE ...
- Git世界历险记
Git-版本管理器 Git ||属于分散型版本管理系统,是为版本管理而而设计的软件.(Linux的创始人Linus Torvalds在2005年开发了Git的原型程序,在此之前人们大多选用Subve ...
- javap浅析-书籍第3章的手写稿样稿
转载于:[xieyu_zy](http://blog.csdn.net/xieyuooo/article/details/17452383) 3.2.1javap命令工具 第1章中我们就提到了有些地方 ...
- 强一致性hash实现java版本及强一致性hash原理
一致性 hash 分布式过程中我们将服务分散到若干的节点上,以此通过集体的力量提升服务的目的.然而,对于一个客户端来说,该由哪个节点服务呢?或者说对某个节点来说他分配到哪些任务呢? 强哈希 考虑到单服 ...
- QTP测试.NET程序的时候,ComboBox下拉框控件选择后,运行时对象不可见解决方案
解决方法: 录制时,选择下拉框数据的时候,不要鼠标单击选择,而是要用ENTER(回车键)来选择,才能完成选择,这样录制就OK了.