题目:
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
/** * @param {number[][]} matrix * @return {number[]} */ var spiralOrder = function(nums) { let temp = []; //设定上下左右的边界 if(nums.length==0){ return []; } let right = nums[0].length-1; let left = 0; let top = 0; let bottom = nums.length-1; while(true){ for(let i=left;i<=right;i++){//向右移动 temp.push(nums[top][i]); } if(++top>bottom){ break; } //向下运动 for(let i=top;i<=bottom;i++){ temp.push(nums[i][right]); } if(--right<left){ break; } //向左运动 for(let i=right;i>=left;i--){ temp.push(nums[bottom][i]); } if(--bottom<top){ break; } //向上运行 for(let i=bottom;i>=top;i--){ temp.push(nums[i][left]); } if(++left>right){ break; } } return temp; };
实现:主要是通过不停的变换上下左右的边界,当从左边界开始,向右移动了一次,则上边界向下移动一位;向下移动的时候,从上边界开始,向下移动一次,右边界向左移动一位;当向左移动的时候,从右边界开始,向左移动一次,下边界向上移动一位;当向上移动的时候,从下边界开始向上移动一次,左边界向右移动一位;直到:上边界大于下边界,或是左边界大于有边界,说明所有数据都已经遍历过了。
来源:https://leetcode-cn.com/problems/spiral-matrix/solution/cxiang-xi-ti-jie-by-youlookdeliciousc-3/
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。