描述
给定一个m x n大小的矩阵(m行,n列),按螺旋的顺序返回矩阵中的所有元素。
示例1
输入:
[[1,2,3],[4,5,6],[7,8,9]]
返回值:
[1,2,3,6,9,8,7,4,5]
代码
解法一:
/**
*
* @param matrix int整型二维数组
* @return int整型一维数组
*/
function spiralOrder( matrix ) {
// write code here
let ans=[]
let cow=matrix[0].length
let col=matrix.length
let left=0,top=0,right=cow-1,bottom=col-1
while(left<=right&&top<=bottom){
for(let i=left;i<=right;i++) ans.push(matrix[top][i])
if(++top>bottom) break;
for(let i=top;i<=bottom;i++) ans.push(matrix[i][right])
if(--right<left) break;
for(let i=right;i>=left;i--) ans.push(matrix[bottom][i])
if(bottom--<top) break;
for(let i=bottom;i>=top;i--) ans.push(matrix[i][left])
if(++left>right) break;
}
return ans
}
module.exports = {
spiralOrder : spiralOrder
};
解法二:
/**
*
* @param matrix int整型二维数组
* @return int整型一维数组
*/
function spiralOrder( matrix ) {
// write code here
let m=matrix.length
if(m===0) return []
if(m===1) return matrix[0]
let n=matrix[0].length
if(n===0) return []
if(n===1) return matrix.map((item)=>item[0])
let min=0
let maxRow=n-1
let maxCol=m-1
let i,j
const ans=[]
while(maxRow>=min&&maxCol>=min){
i=min,j=min
while(j<maxRow){
ans.push(matrix[i][j++])
}
while(i<maxCol){
ans.push(matrix[i++][j])
}
ans.push(matrix[i][j])
while(j>min&&maxCol>min){
ans.push(matrix[i][--j])
}
while(i>min+1&&maxRow>min){
ans.push(matrix[--i][j])
}
min++
maxRow--
maxCol--
}
return ans
}
module.exports = {
spiralOrder : spiralOrder
};