zoukankan      html  css  js  c++  java
  • 剑指offer:顺时针打印矩阵

    一、题目描述

      输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:

      1 2 3 4

      5 6 7 8

      9 10 11 12

      13 14 15 16

      则依次打印出数字

      1,2,3,4

      8,12,16,15

      14,13,9,5

      6,7,11,10

    二、代码

    public class Solution {
        public ArrayList<Integer> printMatrix(int [][] matrix) {
           ArrayList<Integer> res = new ArrayList<>();
            if(matrix.length==0||matrix[0].length==0){
                return res;
            }
            int sR = 0;
            int sC = 0;
            int eR = matrix.length-1;
            int eC = matrix[0].length-1;
            
            while(sR<=eR&&sC<=eC){
                printEdge(matrix, sR++, sC++, eR--, eC--, res);
            }
            return res;
        }
        
        //打印一圈
        public static void printEdge(int[][] matrix,int sR,int sC,int eR,int eC,ArrayList<Integer> res){
            if(sR==eR){
                for(int i=sC;i<=eC;i++){
                    res.add(matrix[sR][i]);
                }
            }else if(sC==eC){
                for(int i=sR;i<=eR;i++){
                    res.add(matrix[i][sC]);
                }
            }else{
                int curSR = sR;
                int curSC = sC;
                
                //向右
                while(curSC!=eC){
                    res.add(matrix[sR][curSC]);
                    curSC++;
                }
                
                //向下
                while(curSR!=eR){
                    res.add(matrix[curSR][eC]);
                    curSR++;
                }
                
                //向左
                while(curSC!=sC){
                    res.add(matrix[eR][curSC]);
                    curSC--;
                }
                
                //向上
                while(curSR!=sR){
                    res.add(matrix[curSR][sC]);
                    curSR--;
                }
            }
                
        }
    }

      

  • 相关阅读:
    一周优化内存、查询速度小结
    三种不同的方式,计算欧氏距离,速度比较
    三种不同的方式,计算欧氏距离,速度比较
    多线程与多进程
    匹配错误分析
    fasttext与Linear SVC 分类测试结果
    什么是闭包
    智能客服功能页面
    客服培训
    约当产量法
  • 原文地址:https://www.cnblogs.com/blzm742624643/p/12240363.html
Copyright © 2011-2022 走看看