剑指offer----顺时针打印矩阵

题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.

(给的第一个数组是第一行,第二个数组是第二行,以前在理解数组的时候记成第一个数组时第一列了,自己多注意一点)

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> array = new ArrayList<Integer>();
        if(matrix.length == 0){
            return null;
        }
        int row = matrix.length;
        int col = matrix[0].length;
        int top = 0, bottom = row - 1, left = 0, right = col -1;
        while((top <= bottom) && (left <= right)){
            for(int i = left ; i <= right; i++){
                array.add(matrix[top][i]);
            }
            top++;
            for(int i = top; i <= bottom; i++){
                array.add(matrix[i][right]);
            }
            right--;
            if(top <= bottom){
                for(int i = right; i >= left; i--){
                array.add(matrix[bottom][i]);
                }
                bottom--;
            }
            
            if(left <= right){
                for(int i = bottom; i >= top; i--){
                    array.add(matrix[i][left]);
                }
                left++;
            }
           
        }
        return array;
    }
}

大致的思路就是使用四个数值分别表示遍历过后各个方向的位置,后面的两个判断条件要谨记,因为有可能前面的操作的进行之后竖向或者横向的元素已经遍历过了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 1,183评论 1 1
  • 剑指 offer 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成...
    faremax阅读 2,263评论 0 7
  • 数组 记录《剑指offer》中所有关于数组的题目,以及LeetCode中的相似题目 相关题目列表 说明 由于简书...
    wenmingxing阅读 1,537评论 1 12
  • 突然很想来聊一聊大众消费的服务业,作为服务者他商业的本质在哪里? 前不久,我去我家不远的一个理发店(这个店第一次去...
    刘书亚的天堂之路阅读 216评论 0 0
  • 介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程...
    ai尛idol阅读 225评论 0 0