54. Spiral Matrix

来源:互联网 发布:spark save json 编辑:程序博客网 时间:2024/05/18 08:49

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].

思路:设置一个(lowi,lowj)和一个(highi,highj)分别指向不同的(0,0)和(m-1,n-1),当lowi<highi&lowj<highj的时候按照蜘蛛的规律,四个循环,给4个边赋值就行。当m*n的时候,可能最后(lowi,lowj)和(highi,highj)在同一行或者同一列上,再用一个循环将这一行或者这一列赋值就行了。

代码如下(已通过leetcode)

public class Solution {
   public List<Integer> spiralOrder(int[][] matrix) {
       List<Integer> list=new ArrayList<Integer>();
    if(matrix==null ||matrix.length==0) return list;
    int m=matrix.length;
    int n=matrix[0].length;
    getlist(list,matrix,0,0,m-1,n-1);
    return list;
   }


private void getlist(List<Integer> list, int[][] matrix, int lowi, int lowj, int highi, int highj) {
// TODO Auto-generated method stub
while(lowi<highi&&lowj<highj) {
for(int i=lowj;i<=highj;i++) list.add(matrix[lowi][i]);
for(int i=lowi+1;i<=highi;i++) list.add(matrix[i][highj]);
for(int i=highj-1;i>=lowj;i--) list.add(matrix[highi][i]);
for(int i=highi-1;i>=lowi+1;i--) list.add(matrix[i][lowj]);
lowi++;
lowj++;
highi--;
highj--;
}
if(lowi==highi) {
if(lowj==highj) list.add(matrix[lowi][lowj]);
else {
for(int i=lowj;i<=highj;i++) list.add(matrix[lowi][i]);
}
} else {
if(lowj==highj) {
for(int i=lowi;i<=highi;i++) list.add(matrix[i][lowj]);
}
}
}
}

0 0
原创粉丝点击