您的位置:首页 > 其它

LeetCode-54.Spiral Matrix

2017-06-03 09:36 573 查看

一、问题描述

给定一个m*n的矩阵,返回从[0,0]开始的矩阵螺旋列表。

例如给定矩阵[ [1,2,3],[4,5,6],[7,8,9] ],返回列表内容为[1,2,3,6,9,8,7,4,5].

二、解题思路

两次循环,内层循环分别按照从左往右,从上到下,从右往左,从下到上的顺序添加到列表,外层循环则控制不断重复这四个内层循环,直到条件不满足退出循环。

设置边界数组board,board[0]存储上边界,board[1]存储下边界,board[2]存储左边界,board[3]存储有边界。i,j分别表示当前位置元素的横纵坐标。

例如从左往右添加元素时,当j==board[3]-1时,此时已经到了最右边的元素,添加完钙元素后需要将i++,跳出当前内层循环,开始从上到下循环。

三、代码

public class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result=new ArrayList<Integer>();
if(matrix==null || matrix.length==0)
return result;
int[] board=new int[4];
board[0]=-1;
board[1]=matrix.length;
board[2]=-1;
board[3]=matrix[0].length;
int i=0;
int j=0;
while((true)){
while(j<board[3]){
if(j==board[3]-1){
result.add(matrix[i][j]);
board[0]=board[0]+1;//上边界
i++;
break;
}
result.add(matrix[i][j]);
j++;
}
//因为退出循环前执行了i++,如果i超出边界,跳出外层循环。
if(i>=board[1])
break;
while(i<board[1]){
if(i==board[1]-1){
result.add(matrix[i][j]);
board[3]=board[3]-1;//有边界
j--;
break;
}
result.add(matrix[i][j]);
i++;
}
if(j<=board[2])
break;
while(j>board[2]){
if(j==board[2]+1){
result.add(matrix[i][j]);
board[1]=board[1]-1;//下边界
i--;
break;
}
result.add(matrix[i][j]);
j--;
}
if(i<=board[0])
break;
while(i>board[0]){
if(i==board[0]+1){
result.add(matrix[i][j]);
board[2]=board[2]+1;//左边界
j++;
break;
}
result.add(matrix[i][j]);
i--;
}
if(j>=board[3])
break;
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  matrix 存储