【Leetcode】Spiral Matrix 一 和 二 in JAVA
2015-01-14 01:05
501 查看
首先是1:
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:
You should return
我的思路是:设定一个moveStep计数,从0,0开始,先向右走m步,然后向下走n-1步,然后向左m-1步,然后向上走n-2步。之后为了再往后走,让m = m - 2,n = n - 2;这样的话相当于开始下一个转圈,直到moveStep到m*n为止~
这里有一个问题,由于m和n很有可能不一样,所以不一样while转一圈才能跳出循环,所以每一个for循环后要判断是否要跳出break。
然后是2:
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:
我的思路与上一题一样,向右n,向下n-1,向左n-1,向上n-2,然后再更新n = n - 2;直到往二维数组里输入了moveStep == n*n
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].
我的思路是:设定一个moveStep计数,从0,0开始,先向右走m步,然后向下走n-1步,然后向左m-1步,然后向上走n-2步。之后为了再往后走,让m = m - 2,n = n - 2;这样的话相当于开始下一个转圈,直到moveStep到m*n为止~
这里有一个问题,由于m和n很有可能不一样,所以不一样while转一圈才能跳出循环,所以每一个for循环后要判断是否要跳出break。
package testAndfun; import java.util.ArrayList; import java.util.List; public class spriralOrder { List<Integer> list = new ArrayList<Integer>(); public static void main(String[] args){ spriralOrder so = new spriralOrder(); int[][] m = {{1,2,3},{4,5,6},{7,8,9}}; //int[][] m = {{2,3}}; System.out.println(so.spiralOrders(m).toString()); } public List<Integer> spiralOrders(int[][] matrix) { if(matrix.length==0 || matrix[0].length==0) return list; int moveStep = 0; int m = matrix[0].length; int n = matrix.length; int x=0,y=-1; while(moveStep!=matrix.length*matrix[0].length){ for(int i=0;i<m;i++){ list.add(matrix[x][++y]); moveStep++; } if(moveStep==matrix.length*matrix[0].length) break; for(int i=0;i<n-1;i++){ list.add(matrix[++x][y]); moveStep++; } if(moveStep==matrix.length*matrix[0].length) break; for(int i=0;i<m-1;i++){ list.add(matrix[x][--y]); moveStep++; } if(moveStep==matrix.length*matrix[0].length) break; for(int i=0;i<n-2;i++){ list.add(matrix[--x][y]); moveStep++; } n = n-2; m = m-2; } return list; } }
然后是2:
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n =
3,
You should return the following matrix:
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
我的思路与上一题一样,向右n,向下n-1,向左n-1,向上n-2,然后再更新n = n - 2;直到往二维数组里输入了moveStep == n*n
package testAndfun; import java.util.Arrays; public class SpiralMatrix { public static void main(String[] args){ SpiralMatrix sm = new SpiralMatrix(); System.out.println(Arrays.deepToString(sm.generateMatrix(3))); } public int[][] generateMatrix(int n) { int[][] out = new int ; if(n<=0) return out; int x=0; int y=-1; int moveStep = 0; while(moveStep != n*n){ for(int i=0;i<n;i++){ out[x][++y] = ++moveStep; } for(int i=0;i<n-1;i++){ out[++x][y] = ++moveStep; } for(int i=0;i<n-1;i++){ out[x][--y] = ++moveStep; } for(int i=0;i<n-2;i++){ out[--x][y] = ++moveStep; } n = n-2; } return out; } }
相关文章推荐
- LeetCode – Spiral Matrix (Java)
- [leetcode-59]spiral matrixII(java)
- LeetCode 562. Longest Line of Consecutive One in Matrix(java)
- Spiral Matrix leetcode java
- (Java)LeetCode-59. Spiral Matrix II
- 牛客:剑指offer:顺时针打印矩阵 (Java)(同leetcode的spiral matrix i 和ii)
- 【Leetcode】Search a 2D Matrix in JAVA
- [leetcode-329]Longest Increasing Path in a Matrix(java)
- 【LeetCode-面试算法经典-Java实现】【054-Spiral Matrix(螺旋矩阵)】
- [Leetcode] Spiral Matrix II (Java)
- Java for LeetCode 059 Spiral Matrix II
- Leetcode: Spiral Matrix. Java
- leetcode:Spiral Matrix 【Java】
- [leetcode]54. Spiral Matrix(Java)
- Leetcode 54. Spiral Matrix (Medium) (java)
- 【LeetCode-面试算法经典-Java实现】【059-Spiral Matrix II(螺旋矩阵II)】
- [LeetCode]Longest Increasing Path in a Matrix(Java)
- [LeetCode][Java] Spiral Matrix
- Spiral Matrix II leetcode java
- leetcode JAVA Spiral Matrix II 难度系数3 3.19