【Leetcode】Spiral Matrix 一 和 二 in JAVA
首先是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:
[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ]
You should return [1,2,3,6,9,8,7,4,5]
.
这里有一个问题,由于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
,
[ [ 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[n][n]; 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; } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。