思路
没有什么好的思路
- 按圈顺时针循环,在纸上画出来各个边界
- 旋转数组,取第一行,然后递归。然而旋转数组的复杂度比较高。
代码
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; } }