第29题:LeetCode54:Spiral Matrix螺旋矩阵

给定一个包含 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]

考点

1.抽象问题画图

2.复杂问题分解成简单问题

 

思路

1.把矩阵看成若干个顺时针方向的圈组成

1.1 每个圈的起点都是(start,start) ,横纵坐标相等

1.2 对于5*5的矩阵,最后一圈只有一个数字(2,2),5>2*2.对于6*6的矩阵,最后一圈有四个数字,左上角起点(2,2),6>2*2

1.3 横纵坐标都小于行列数的1/2,才能作为起点。下标从0开始,所以是小于,不是小于等于

循环条件 while ( cols > start << 1 && rows > start<<1)

 

2.打印矩阵最里面的一圈,可能只需要三步、两步、甚至一步

2.1  定义起点横纵坐标的终止位置

终止列号:EndX = cols - 1 - start;

终止行号:EndY = rows - 1 - start;

数学意义:

边界坐标 = 最后一列坐标 - 已经打印过的列数=(cols-1)-(start-0)= cols - 1 - start;

 

2.2 从左到右打印第一行

第一步总是需要的,

循环条件:i=start;i<=EndX;i++

print num[start][i]

 

2.3 从上到下打印最后一列:

 

第二步条件:至少两列start<EndY

循环条件:i=start+1;i<=endY;i++

print num[i][EndX];

 

2.4 从右到左打印最后一行

第三步条件:至少两行两列  start<EndX && start < EndY

循环条件: i=EndX-1;i>=start;i--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值