解题思路:
这题没有什么绕弯子的地方。 基本上按照题目顺着写代码就行。
首先我们定义四个指针 即上下左右,根据状况,来移动指针,比如添加完第一横行后,我们需要将top指针加1,从矩阵最后一列的第二个元素开始添加。
此外我们再获取矩阵元素的总个数,然后一个一个取走,当全部被取完便退出循环。
其他以此类推。
代码部分:
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
LinkedList<Integer> res = new LinkedList<>();
if (matrix == null || matrix.length == 0) return res;
int left = 0, right = matrix[0].length-1;
int top = 0, buttom = matrix.length-1;
int numEle = matrix[0].length * matrix.length; //计算总共个数,然后一个一个取走。
while(numEle >= 1) { //判断是否取完。
for(int i = left; i <=right && numEle >=1; i++) {
res.add(matrix[top][i]);
numEle--;
}
top++;
for(int i = top;i <= buttom && numEle >=1; i++) {
res.add(matrix[i][right]);
numEle--;
}
right--;
for(int i = right;i>=left && numEle >=1; i--) {
res.add(matrix[buttom][i]);
numEle--;
}
buttom--;
for(int i = buttom; i>=top && numEle >=1; i--) {
res.add(matrix[i][left]);
numEle--;
}
left++;
}
return res;
}
}