首页 > 其他 > 详细

面试题29. 顺时针打印矩阵

时间:2020-06-06 14:18:46      阅读:42      评论:0      收藏:0      [点我收藏+]

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

 

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]


链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof

public static void main(String[] args) {
        // TODO Auto-generated method stub
        int [][]matrix = {
                       //left   right
                          {1,2,3},  //upper
                          {5,6,7},
                          {9,10,11},
                          {13,14,15}//down
                          
                          };
        int[] order = spiralOrder(matrix);
        for(int i:order) {
            System.out.print(i+" ");
        }
        
    }
    public static int[] spiralOrder(int[][] matrix) {
        int col = matrix[0].length; //3列
        int row =matrix.length ;    //4行
        if(row==0) {
            return new int[0];
        }
        int [] ret = new int[col*row];
        int index = 0;
        int left =0; 
        int right=col-1;
        int upper=0;
        int down =row-1 ;
        while(index<ret.length) {
            for(int i=left;i<=right;i++) {
                ret[index++]=matrix[upper][i];
                if(index == ret.length){
                    return ret;
                }
            }
            upper++;//第一行遍历完了 upper++,进入下一行
            for(int i=upper;i<=down;i++) {
                ret[index++]=matrix[i][right];
                if(index == ret.length){
                    return ret;
                }
            }
            right--; //最右边的列遍历完了right--,进入左边的一列
            for(int i=right;i>=left;i--) {
                ret[index++]=matrix[down][i];
                if(index == ret.length){
                    return ret;
                }
            }
            down--; //最下一层遍历完了down--,进入上一行
            for(int i=down;i>=upper;i--) {
                ret[index++]=matrix[i][left];
                if(index == ret.length){
                    return ret;
                }
            }
            left++;//最左边的一列遍历完了left++,进入下一列
            
        }
        
        return ret;

    }

 

面试题29. 顺时针打印矩阵

原文:https://www.cnblogs.com/cocobear9/p/13054361.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!