码迷,mamicode.com
首页 > 其他好文 > 详细

54. Spiral Matrix

时间:2016-05-08 07:59:36      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

    /*
     * 54. Spiral Matrix 
     * 2016-5-7 by Mingyang
     * 第一个是我的代码,虽然我测试了各种形状的matrix还是没过,还在找原因
     * 需要注意的就是row和col等于1的时候需要单独拿出来讨论,这样才可以通过
     */
     public static List<Integer> spiralOrder1(int[][] matrix) {
            int row=matrix.length;
            int col=matrix[0].length;
            List<Integer> res=new ArrayList<Integer>();
            if(matrix==null||row==0||col==0)
            return res;
            int layer=0;
            if(row==1){
                for(int k=0;k<col;k++){
                 res.add(matrix[0][k]);
                }
                 return res;
            }
             if(col==1){
                for(int k=0;k<row;k++){
                 res.add(matrix[k][0]);
                }
                 return res;
            }
            while(layer<(Math.min(row,col)/2)){
                int i=layer;
                int j=layer;
                for(;j<col-1-layer;j++){
                    res.add(matrix[i][j]);
                }
                for(;i<row-1-layer;i++){
                    res.add(matrix[i][j]);
                }
                for(;j>layer;j--){
                    res.add(matrix[i][j]);
                }
                for(;i>layer;i--){
                    res.add(matrix[i][j]);
                }
              layer++; 
            }
            if(res.size()<(row*col))
            res.add(matrix[layer][layer]);
            return res;
        }
     //这是过了的代码
    public ArrayList<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        if (matrix == null || matrix.length == 0)
            return result;
        int m = matrix.length;
        int n = matrix[0].length;
        int x = 0;
        int y = 0;
        while (m > 0 && n > 0) {
            // if one row/column left, no circle can be formed
            if (m == 1) {
                for (int i = 0; i < n; i++) {
                    result.add(matrix[x][y++]);
                }
                break;
            } else if (n == 1) {
                for (int i = 0; i < m; i++) {
                    result.add(matrix[x++][y]);
                }
                break;
            }
            // below, process a circle
            // top - move right
            for (int i = 0; i < n - 1; i++)
                result.add(matrix[x][y++]);
            // right - move down
            for (int i = 0; i < m - 1; i++)
                result.add(matrix[x++][y]);
            // bottom - move left
            for (int i = 0; i < n - 1; i++)
                result.add(matrix[x][y--]);
            // left - move up
            for (int i = 0; i < m - 1; i++)
                result.add(matrix[x--][y]);
            x++;
            y++;
            m = m - 2;
            n = n - 2;
        }

        return result;
    }

 

54. Spiral Matrix

标签:

原文地址:http://www.cnblogs.com/zmyvszk/p/5469701.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!