螺旋矩阵
题59 螺旋矩阵II
给你一个正整数 `n` ,生成一个包含 `1` 到 `n2` 所有元素,
且元素按顺时针顺序螺旋排列的 `n x n` 正方形矩阵 `matrix` 。
思路:求解本题依然是要坚持循环不变量原则。如果是左闭右开就要全是左闭右开。
模拟顺时针画矩阵的过程:
- 填充上行从左到右
- 填充右列从上到下
- 填充下行从右到左
- 填充左列从下到上
由外向内一圈一圈这么画下去。
代码方面:你要先知道你要填充几圈用loop记录。while(loop--){先填充上行,然后右列,然后下行,最后左列,填完一圈更新第二圈的起始点,}。最后,如果n是个奇数就说明有中心点num[mid][mid]=n^2。
题目54 螺旋矩阵
给你一个 `m` 行 `n` 列的矩阵 `matrix` ,请按照顺时针螺旋顺序,返回矩阵中的所有元素。
输入: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
思路:这道题做的话就也是按照找圈数来做,但是些许不同。一圈走完了之后,四个方向统一向里面收缩,所以这个策略是一圈一圈的加入结果集,那怎样才算是一圈呢?自然是左边界小于右边界同时上边界小于下边界。
因为题目并没有说明是一个正方形,所以一圈一圈的最后会有情况是剩下一行或剩下一列,针对一行或一列的情况,还是依旧比方说一行,从左到右加入结果集,如果说是一列,同理,从上到下加入结果集
上面一题可以试一试用这个方法
剑指offer29 顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4X4矩阵:
input [[1,2,3,4],
[5,6,7,8],
[9,10,11,12],
[13,14,15,16]]
return [1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10]
个人思路:就是和第一题一样,按照顺时针填充。首先你要知道你要填充几圈。
u1s1牛客这道题真的很***,给的列子都什么玩意