题目重述
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 输出:[1,2,3,4,8,12,11,10,9,5,6,7]
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/spiral-matrix 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
总体思路为模拟,设定上下左右四个边界,然后模拟从左到右、从上到下、从右到左,从下到上四部分。 每次走完一部分都更改边界,判定边界是否合法,不合法跳出循环,说明已遍历完。
Java实现
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> result = new ArrayList<>();
if(matrix.length==0)
{
return result;
}
int up = 0;
int down = matrix.length-1;
int left = 0;
int right = matrix[0].length-1;
while(true)
{
for (int i = left; i <= right; i++) {
result.add(matrix[up][i]);
}
up++;
if(up>down)
{
break;
}
for (int i = up; i <= down; i++) {
result.add(matrix[i][right]);
}
right--;
if(right<left)
{
break;
}
for (int i = right; i >=left ; i--) {
result.add(matrix[down][i]);
}
down--;
if(up>down)
{
break;
}
for (int i = down; i >= up; i--) {
result.add(matrix[i][left]);
}
left++;
if(right<left)
{
break;
}
}
return result;
}
}
|