题目:
给定一个包含 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; };
实现:主要是通过不停的变换上下左右的边界,当从左边界开始,向右移动了一次,则上边界向下移动一位;向下移动的时候,从上边界开始,向下移动一次,右边界向左移动一位;当向左移动的时候,从右边界开始,向左移动一次,下边界向上移动一位;当向上移动的时候,从下边界开始向上移动一次,左边界向右移动一位;直到:上边界大于下边界,或是左边界大于有边界,说明所有数据都已经遍历过了。
2.
题目:
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
/** * @param {number} n * @return {number[][]} */ var generateMatrix = function(num) { let temp = []; for(let i=1;i<=num;i++){ let demo = []; for(let j=1;j<=num;j++){ demo.push(0); } temp.push(demo); } let left = 0; let right = num-1; let top = 0; let bottom = num-1; let count = 0; let end = num*num; while(true){ //向左运动 for(let i=left;i<=right;i++){ temp[top][i] = ++count; } if(++top>bottom||count>end){ break; } //向下 for(let i=top;i<=bottom;i++){ temp[i][right] = ++count; } if(--right<left||count>end){ break; } //向左 for(let i=right;i>=left;i--){ temp[bottom][i] = ++count; } if(--bottom<top||count>end){ break; } //向上 for(let i=bottom;i>=top;i--){ temp[i][left] = ++count; } if(++left>top||count>end){ 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。