每日一题《剑指offer》数组篇之顺时针打印矩阵

简介: 每日一题《剑指offer》数组篇之顺时针打印矩阵

顺时针打印矩阵

难度:简单

描述

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

数据范围

0 <= matrix.length <= 100

0 <= matrix[i].length <= 100

举例

image.png

解题思路

简单来说,就是不断地收缩矩阵的边界

定义四个变量代表范围,up、down、left、right

  1. 向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up 加一,同时判断是否和代表下边界的 down 交错
  2. 向下走存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 right 减一,同时判断是否和代表左边界的 left 交错
  3. 向左走存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 down 减一,同时判断是否和代表上边界的 up 交错
  4. 向上走存入整列的值,当存入后,该列再也不会被遍历,代表左边界的 left 加一,同时判断是否和代表右边界的 right 交错

编程实现(java)


import java.util.ArrayList;
public class Solution {
    public ArrayList printMatrix(int [][] matrix) {
        ArrayList list = new ArrayList<>();
        if(matrix == null || matrix.length == 0 || matrix[0].length == 0){
            return list;
        }
        int up = 0;
        int down = matrix.length-1;
        int left = 0;
        int right = matrix[0].length-1;
        while(true){
            // 最上面一行
            for(int col=left;col<=right;col++){
                list.add(matrix[up][col]);
            }
            // 向下逼近
            up++;
            // 判断是否越界
            if(up > down){
                break;
            }
            // 最右边一行
            for(int row=up;row<=down;row++){
                list.add(matrix[row][right]);
            }
            // 向左逼近
            right--;
            // 判断是否越界
            if(left > right){
                break;
            }
            // 最下面一行
            for(int col=right;col>=left;col--){
                list.add(matrix[down][col]);
            }
            // 向上逼近
            down--;
            // 判断是否越界
            if(up > down){
                break;
            }
            // 最左边一行
            for(int row=down;row>=up;row--){
                list.add(matrix[row][left]);
            }
            // 向右逼近
            left++;
            // 判断是否越界
            if(left > right){
                break;
            }
        }
        return list;
    }
}

结果

image.png


image.png

相关文章
|
26天前
|
算法 测试技术 索引
每日一题:LeetCode-611. 有效三角形的个数
每日一题:LeetCode-611. 有效三角形的个数
|
4月前
剑指 Offer 29:顺时针打印矩阵
剑指 Offer 29:顺时针打印矩阵
16 0
|
5月前
|
Java
【剑指offer】-顺时针打印矩阵-19/67
【剑指offer】-顺时针打印矩阵-19/67
|
12月前
|
C语言
LeetCode二维数组例题(原地旋转和对角线遍历)-c语言
LeetCode二维数组例题(原地旋转和对角线遍历)-c语言
|
7月前
|
算法 C++
剑指offer(C++)-JZ29:顺时针打印矩阵(算法-模拟)
剑指offer(C++)-JZ29:顺时针打印矩阵(算法-模拟)
|
11月前
剑指offer 28. 顺时针打印矩阵
剑指offer 28. 顺时针打印矩阵
38 0
|
11月前
剑指offer_数组---顺时针打印矩阵
剑指offer_数组---顺时针打印矩阵
36 0
|
12月前
|
算法 C++ Python
每日算法系列【LeetCode 153】寻找旋转排序数组中的最小值
每日算法系列【LeetCode 153】寻找旋转排序数组中的最小值
|
Java C++
环形矩阵(螺旋矩阵)&&蛇形矩阵
环形矩阵(螺旋矩阵)&&蛇形矩阵
96 0