您的位置:首页 > Web前端 > JavaScript

[LeetCode][JavaScript]Spiral Matrix

2015-09-27 15:55 591 查看

Spiral Matrix

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

For example,
Given the following matrix:

[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]

You should return
[1,2,3,6,9,8,7,4,5]
.

https://leetcode.com/problems/spiral-matrix/

旋转抱歉。

开四个变量,代表剩余矩形长度的开始、结束和宽度的开始、结束。

四个值圈定了一个范围(也可以理解为两个点四个坐标:左上角X,Y和右下角X,Y,四个坐标确定一个矩形)。

一开始高度从0到matrix.length,长度从0到matrix[0].length。

每计算一边,缩小对应的长度或宽度的范围。

/**
* @param {number[][]} matrix
* @return {number[]}
*/
var spiralOrder = function(matrix) {
var res = [], i;
var m = matrix.length, n = (m === 0 ? 0 : matrix[0].length);
var heightStart = 0, heightEnd = m - 1, widthStart  = 0, widthEnd = n - 1;
while(heightStart <= heightEnd && widthStart <= widthEnd){
for(i = widthStart; i <= widthEnd; i++){
res.push(matrix[heightStart][i]);
}
heightStart++;
for(i = heightStart; i <= heightEnd; i++){
res.push(matrix[i][widthEnd]);
}
widthEnd--;
if(heightStart <= heightEnd){
for(i = widthEnd; i >= widthStart; i--){
res.push(matrix[heightEnd][i]);
}
heightEnd--;
}
if(widthStart <= widthEnd){
for(i = heightEnd; i >= heightStart; i--){
res.push(matrix[i][widthStart]);
}
widthStart++;
}
}
return res;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: