54. 螺旋矩阵
解题思路
出现的问题
JavaScript解法代码
/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
let column = matrix.length
let row = matrix[0].length
let left=0, right=row-1, top=0, bottom=column-1;
let output = []
while(left <= right && top<=bottom){
for(let i=left;i<=right;i++){
output.push(matrix[top][i])
}
for(let j=top+1;j<=bottom;j++){
output.push(matrix[j][right])
}
if(left < right && top< bottom){
for(let i=right-1;i>=left;i--){
output.push(matrix[bottom][i])
}
for(let j=bottom-1;j>top;j--){
output.push(matrix[j][left])
}
}
left++
right--
top++
bottom--
}
return output
};
Python解法代码
class Solution(object):
def spiralOrder(self, matrix):
"""
:type matrix: List[List[int]]
:rtype: List[int]
"""
column = len(matrix)
row = len(matrix[0])
left=0
right=row-1
top=0
bottom=column-1
output = []
while(left <= right and top<=bottom):
for i in range(left,right+1):
output.append(matrix[top][i])
for j in range(top+1,bottom+1):
output.append(matrix[j][right])
if(left < right and top< bottom):
for i in range(right-1,left-1,-1):
output.append(matrix[bottom][i])
for j in range(bottom-1,top,-1):
output.append(matrix[j][left])
left+=1
right-=1
top+=1
bottom-=1
return output
剑指Offer 29
同样的题。
总结:
螺旋输出主要是思路清楚、边界清楚。通解:
// 定义left,right,top,bottom
while(left <= right && top<=bottom){
for(let i=left;i<=right;i++){
// 从左上至右上
}
for(let j=top+1;j<=bottom;j++){
// 从右上至右下
}
if(left < right && top< bottom){
for(let i=right-1;i>=left;i--){
// 从右下至左下
}
for(let j=bottom-1;j>top;j--){
// 从左下至右上
}
}
left++
right--
top++
bottom--
}