题解 | #螺旋矩阵#

螺旋矩阵

http://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31

螺旋矩阵,即从左至右,从上到下,从右至左,从下到上;
1、简单一点,就是定义四个变量表示这四个过程的各自边界值;
2、然后依次执行,没执行完一圈之后,需要更新上、下、左、右这个四个边界值;
3、如何判断已经遍历完?博主用了一个相对较笨的办法,即每次执行完一行或者一列的添加时,判断list的大小和数组的大小是否一致,一致则跳出循环。

ArrayList list = new ArrayList<Integer>();
        if(matrix.length==0){
            return list;
        }
        int m = matrix.length-1;
        int n = matrix[0].length-1;
        int top = 0;     //定义四个上下左右边界值;
        int bottom = m;
        int right = n;
        int left = 0;

        while(true) {
            for (int i = left; i <= right; i++) {//从左至右
                list.add(matrix[top][i]);
            }
            if(list.size()==(m+1)*(n+1)){
                break;
            }
            for (int i = top + 1; i <= bottom; i++) {//从上至下
                list.add(matrix[i][right]);
            }
            if(list.size()==(m+1)*(n+1)){
                break;
            }
            for (int i = right - 1; i >= left; i--) {//从右至左
                list.add(matrix[bottom][i]);
            }
            if(list.size()==(m+1)*(n+1)){
                break;
            }
            for (int i = bottom - 1; i >= top + 1; i--) {//从下至上
                list.add(matrix[i][left]);
            }
            top++;    //更新四个边界值
            right--;
            bottom--;
            left++;
            if(list.size()==(m+1)*(n+1)){
                break;
            }
        }
全部评论

相关推荐

点赞 评论 收藏
分享
酷酷我灵儿帅:这去不去和线不线下面说实话没啥关系
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务