leetcode 59. Spiral Matrix II
2017-08-11 15:22
495 查看
Given an integer n, generate a square matrix filled with elements from 1 to n2 in
spiral(螺旋形的) order.
For example,
Given n =
You should return the following matrix:
很经典的一道题了。
我的思路是按照4个方向来走:→ ↓ ← ↑ ,每次触到尽头 ( 矩阵边界 或者 已填充的格子) 都换一个方向。
这个解法也适用于矩阵是 m*n 的情形。
此为隐藏吐槽内容:(在某乎上用这个出题,来考验别人是不是程序员,也太low了吧。别的不说,人家是不是程序员管你屁事,还要你考验?这道题做出来了,也别太高兴,任重而道远,人品也很重要。)
spiral(螺旋形的) order.
For example,
Given n =
3,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
很经典的一道题了。
我的思路是按照4个方向来走:→ ↓ ← ↑ ,每次触到尽头 ( 矩阵边界 或者 已填充的格子) 都换一个方向。
public int[][] generateMatrix(int n) { int[] direction_x=new int[]{0,1,0,-1};//方向是顺时针 int[] direction_y=new int[]{1,0,-1,0};//即 向右,向下,向左,向上 int[][] matrix=new int ; int x=0,y=0; int pointer=0; for(int i=1;i<=n*n;i++){ matrix[x][y]=i; int nextX=x+direction_x[pointer]; int nextY=y+direction_y[pointer]; if( nextX<0 || nextX>=n || nextY<0 || nextY>=n || matrix[nextX][nextY]!=0 ){ pointer=(pointer+1)%4; nextX=x+direction_x[pointer]; nextY=y+direction_y[pointer]; } x=nextX; y=nextY; } return matrix; }大神则使用的是缩小边界法。如:当n-1行已被填充,则把下边界设为n-2。
public class Solution { public int[][] generateMatrix(int n) { // Declaration int[][] matrix = new int ; // Edge Case if (n == 0) { return matrix; } // Normal Case int rowStart = 0; int rowEnd = n-1; int colStart = 0; int colEnd = n-1; int num = 1; //change while (rowStart <= rowEnd && colStart <= colEnd) { for (int i = colStart; i <= colEnd; i ++) { matrix[rowStart][i] = num ++; //change } rowStart ++; for (int i = rowStart; i <= rowEnd; i ++) { matrix[i][colEnd] = num ++; //change } colEnd --; for (int i = colEnd; i >= colStart; i --) { if (rowStart <= rowEnd) matrix[rowEnd][i] = num ++; //change } rowEnd --; for (int i = rowEnd; i >= rowStart; i --) { if (colStart <= colEnd) matrix[i][colStart] = num ++; //change } colStart ++; } return matrix; } }
这个解法也适用于矩阵是 m*n 的情形。
此为隐藏吐槽内容:(在某乎上用这个出题,来考验别人是不是程序员,也太low了吧。别的不说,人家是不是程序员管你屁事,还要你考验?这道题做出来了,也别太高兴,任重而道远,人品也很重要。)
相关文章推荐
- [LeetCode 59] Spiral Matrix II
- 【leetcode】Array——Spiral MatrixII(59)
- LeetCode 59 Spiral Matrix II(螺旋矩阵II)(Array)
- Leetcode 59. Spiral Matrix II
- Leetcode:59. Spiral Matrix II
- leetcode[59]Spiral Matrix II
- Leetcode59 Spiral Matrix II
- leetcode 59. Spiral Matrix II
- LeetCode-59-Spiral Matrix II(Array)-Medium
- 【leetcode】59. Spiral Matrix II
- 【leetcode】59.Spiral Matrix II
- 【LeetCode】59. Spiral Matrix II
- LeetCode59 Spiral Matrix II
- [LeetCode]59. Spiral Matrix II
- leetcode 59: Spiral Matrix II
- 【LEETCODE】59-Spiral Matrix II
- LeetCode 59. Spiral Matrix II
- LeetCode 59 - Spiral Matrix II
- leetcode 59:Spiral Matrix II
- [leetcode] 59.Spiral Matrix II