54. 螺旋矩陣
解題思路
出現(xiàn)的問題
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
同樣的題。
總結(jié):
螺旋輸出主要是思路清楚介褥、邊界清楚。通解:
// 定義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--
}