publicList<Integer>spiralOrder(int[][] matrix){if(matrix ==null|| matrix.length ==0|| matrix[0].length ==0){returnnewArrayList<>();}int left =0;int right = matrix[0].length -1;int top =0;int bottom = matrix.length -1;List<Integer> res =newArrayList<>((right +1)*(bottom +1));while(left <= right && top <= bottom){for(int i = left; i <= right; i++){
res.add(matrix[top][i]);}for(int i = top +1; i <= bottom; i++){
res.add(matrix[i][right]);}if(left < right && top < bottom){for(int i = right -1; i >= left; i--){
res.add(matrix[bottom][i]);}for(int i = bottom -1; i > top; i--){
res.add(matrix[i][left]);}}
left++;
right--;
top++;
bottom--;}return res;}
go
funcspiralOrder(matrix [][]int)[]int{var res []intiflen(matrix)==0||len(matrix[0])==0{return res
}
left, right, top, button :=0,len(matrix[0])-1,0,len(matrix)-1for left <= right && top <= button {for i := left; i <= right; i++{
res =append(res, matrix[top][i])}for i := top +1; i <= button; i++{
res =append(res, matrix[i][right])}if left < right && top < button {for i := right -1; i >= left; i--{
res =append(res, matrix[button][i])}for i := button -1; i > top; i--{
res =append(res, matrix[i][left])}}
left++
right--
top++
button--}return res
}