cocobear9  
一枚普通的zisuer(lll¬ω¬),努力每天多学一点点

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

 

示例 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;

    }

 

posted on 2020-06-06 13:11  cocobear9  阅读(224)  评论(0)    收藏  举报