您的位置:首页 > 编程语言 > Java开发

Spiral Matrix leetcode java

2014-08-03 02:07 369 查看
题目

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

题解

这道题是实现题。

考虑2个初始条件,如果矩阵只有一行或者一列,那么无需转圈,依次输出即可。

其他情况均需转圈:从左到右,从上到下,从右到左,从下到上。 从大圈依次循环到小圈即可。

代码如下:

1 public ArrayList<Integer> spiralOrder(int[][] matrix) {

2 ArrayList<Integer> result = new ArrayList<Integer>();

3 if(matrix == null || matrix.length == 0)

4 return result;

5

6 int m = matrix.length;

7 int n = matrix[0].length;

8

9 int x=0;

int y=0;

while(m>0 && n>0){

//if one row/column left, no circle can be formed

if(m==1){

for(int i=0; i<n; i++){

result.add(matrix[x][y++]);

}

break;

}else if(n==1){

for(int i=0; i<m; i++){

result.add(matrix[x++][y]);

}

break;

}

//below, process a circle

//top - move right

for(int i=0;i<n-1;i++)

result.add(matrix[x][y++]);

//right - move down

for(int i=0;i<m-1;i++)

result.add(matrix[x++][y]);

//bottom - move left

for(int i=0;i<n-1;i++)

result.add(matrix[x][y--]);

//left - move up

for(int i=0;i<m-1;i++)

result.add(matrix[x--][y]);

x++;

y++;

m=m-2;

n=n-2;

}

return result;

}

Reference:http://www.programcreek.com/2013/01/leetcode-spiral-matrix-java/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: