题目
给定m×n个元素(m行,n列)的矩阵,以螺旋顺序返回矩阵的所有元素。 例如, 鉴于以下矩阵: [ [1,2,3], [4,5,6], [7,8,9] ] 你应该返回[1,2,3,6,9,8,7,4,5]。
代码实现
代码1:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> result=new ArrayList<>();
if(matrix==null || matrix.length==0 || matrix[0].length==0) return result;
int m=matrix.length;
int n=matrix[0].length;
int [][] flag=new int [m][n];
int l2r=0,u2d=n-1,r2l=m-1,d2u=0;
int count=0;
while(count<m*n){
for(int i=0;i<n;i++){//从左往右
if(flag[l2r][i]==0){
result.add(matrix[l2r][i]);
count++;
flag[l2r][i]=1;
}
}
l2r++;
for(int i=0;i<m;i++){//从上往下
if(flag[i][u2d]==0){
result.add(matrix[i][u2d]);
count++;
flag[i][u2d]=1;
}
}
u2d--;
for(int i=n-1;i>=0;i--){//从右往左
if(flag[r2l][i]==0){
result.add(matrix[r2l][i]);
count++;
flag[r2l][i]=1;
}
}
r2l--;
for(int i=m-1;i>=0;i--){//从下往上
if(flag[i][d2u]==0){
result.add(matrix[i][d2u]);
count++;
flag[i][d2u]=1;
}
}
d2u++;
}
return result;
}
}
代码2:
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> result=new ArrayList<>();
if(matrix==null || matrix.length==0 || matrix[0].length==0) return result;
int m=matrix.length;
int n=matrix[0].length;
int l2r=0,u2d=n-1,r2l=m-1,d2u=0;
int count=0;
while(count<m*n){
for(int i=d2u;i<=u2d;i++){//从左往右
result.add(matrix[l2r][i]);
count++;
}
if(count>=m*n) break;
l2r++;
for(int i=l2r;i<=r2l;i++){//从上往下
result.add(matrix[i][u2d]);
count++;
}
if(count>=m*n) break;
u2d--;
for(int i=u2d;i>=d2u;i--){//从右往左
result.add(matrix[r2l][i]);
count++;
}
if(count>=m*n) break;
r2l--;
for(int i=r2l;i>=l2r;i--){//从下往上
result.add(matrix[i][d2u]);
count++;
}
if(count>=m*n) break;
d2u++;
}
return result;
}
}
题目来自牛客网leetcode