纯粹的暴力法,,,真的是看思路,,看边界 ,,针对的一列的要 提早结束,所以有 && nums<m*n

 public ArrayList<Integer> printMatrix(int [][] matrix) {
        if(matrix.length==0){
            return null;
        }
        ArrayList<Integer> res=new ArrayList<Integer>();
        int m=matrix.length;
        int n=matrix[0].length;
        int x=0;
        int y=0;
        int tmp=0;//记录第tmp圈,这回影响上下左右的边界
        int nums=0;//统计数字,影响结束条件
        while(nums<m*n){
            while(y<n-tmp && nums<m*n){
                res.add(matrix[x][y]);
                y++;
                nums++;
            }
            y-=1;
            x+=1;
            while(x<m-tmp && nums<m*n){
                res.add(matrix[x][y]);
                x++;
                nums++;
            }
            x-=1;
            y-=1;
            while(y>=0+tmp && nums<m*n){
                res.add(matrix[x][y]);
                y--;
                nums++;
            }
            y+=1;
            x-=1;
            while(x>tmp && nums<m*n){
                res.add(matrix[x][y]);
                x--;
                nums++;
            }
            x+=1;
            y+=1;
            tmp+=1;
        }
        return res;
    }