给定一个包含 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]
思路:
这幅图片足以说明一切道理。
首先我们可以想到螺旋读这个二维数组。
分两个部分。一个是一圈一圈的读外圈,读到最后只剩内部(被3标注的)。
可以看到,我们用r1、r2、c1、c2标注这个圈!
每次读完一个圈然后r1++,r2--,c1++,c2-- 就是缩减一个圈!
循环跳出条件。
while中的if(r1<r2&&c1<c2)只有这个成立了才是外圈,否则说明已经到了内圈
当r1>r2|c1>c2 仔细理解。