思路
没有什么好的思路
- 按圈顺时针循环,在纸上画出来各个边界
- 旋转数组,取第一行,然后递归。然而旋转数组的复杂度比较高。
代码
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printMatrix(int [][] matrix) {
ArrayList<Integer> arr=new ArrayList<>();
int p=0,q=matrix[0].length-1,h=0,l=matrix.length-1;
while(p<=q && h<=l){
if(p==q){
for(int i=h;i<=l;i++){
arr.add(matrix[i][p]);
}
break;
}
if(h==l){
for(int i=p;i<=q;i++){
arr.add(matrix[h][i]);
}
break;
}
for(int i=p;i<=q;i++){
arr.add(matrix[h][i]);
}
h++;
for(int i=h;i<=l;i++){
arr.add(matrix[i][q]);
}
q--;
for(int i=q;i>=p;i--){
arr.add(matrix[l][i]);
}
l--;
for(int i=l;i>=h;i--){
arr.add(matrix[i][p]);
}
p++;
}
return arr;
}
} 
京公网安备 11010502036488号