题目
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入: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]
分析
这一道题与上一道题很相似,但是要注意细微的不同之处
代码
var spiralOrder = function(matrix) {
let startx = starty = 0
let m = matrix.length
let n = matrix[0].length
let res = []
let offet = 1
let loop = Math.floor((Math.min(m,n))/2)
let count = 1
while(loop--){
let hang = startx, lie = starty
//最上面
for(;lie<starty+n-offet;lie++){
res.push(matrix[hang][lie])
}
//最右侧
for(;hang<startx+m-offet;hang++){
res.push(matrix[hang][lie])
}
//最下侧
for(;lie>starty;lie--){
res.push(matrix[hang][lie])
}
//最zuoce
for(;hang>startx;hang--){
res.push(matrix[hang][lie])
}
starty++
startx++
offet+=2
}
if (res.length === m * n) return res
if(m==n){
if(m%2 == 1){
let mid = Math.floor(m/2)
res.push(matrix[mid][mid])
}
}
if(n>m){
let mid = Math.floor(m/2)
for(let i=starty;i<=n+starty-offet;i++){
res.push(matrix[mid][i])
}
}
if(m>n){
let mid = Math.floor(n/2)
for(let i=startx;i<=m+startx-offet;i++){
res.push(matrix[i][mid])
}
}
return res
}
注意
1.这不是个方阵,而是m*n
2.这个矩阵本身就是存在数字的,是让我们按照螺旋的顺序,吧依次遍历到的数字存储到一个数组中然后输出
3.最后要注意判断剩下的是一行还是一列,要怎样遍历出来,这也是我出错最多的地方,改了好久才改正确