【剑指offer】-顺时针打印矩阵-19/67

简介: 【剑指offer】-顺时针打印矩阵-19/67

1. 题目描述

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

1 2 3
4 5 6
7 8 9

依次打印出数字为:1 2 3 6 9 8 7 4 5

2. 题目分析

  1. 一个二维数组,让你按照顺时针的规则,将遍历的数字存入到一个数组中,然后return
  2. 设置4个变量:up、down、left、right,分别代表第一行、最后一行、第一列、最后一列
  3. 向右走存入整行的值,当存入后,该行再也不会被遍历,代表上边界的 up 加一,同时判断是否和代表下边界的 down 交错
  4. 向下走存入整列的值,当存入后,该列再也不会被遍历,代表右边界的 right 减一,同时判断是否和代表左边界的 left 交错
  5. 向左走存入整行的值,当存入后,该行再也不会被遍历,代表下边界的 down 减一,同时判断是否和代表上边界的 up 交错
  6. 向上走存入整列的值,当存入后,该列再也不会被遍历,代表左边界的 left 加一,同时判断是否和代表右边界的 right 交错
  7. 最后即可得到顺时针旋转的list

3. 题目代码

public class Matrix {
  public static void main(String[] args) {
    // int[][] a = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
    int[][] a = { { 1 }, { 2 }, { 3 }, { 4 }, { 5 } };
    /*
     * 1 2 3 4 5
     */
    ArrayList<Integer> list = new ArrayList<>();
    list = printMatrix(a);
    for (int i = 0; i < list.size(); i++) {
      System.out.print(list.get(i) + " ");
    }
  }
  public static ArrayList<Integer> printMatrix(int[][] matrix) {
    ArrayList<Integer> list = new ArrayList<>();
    int up = 0;
    int down = matrix.length - 1;// 代表的是行数 4
    int left = 0;
    int right = matrix[0].length - 1;// 代表的是列数 1
    while (up <= down && left <= right) {
      for (int i = left; i <= right; i++) {
        list.add(matrix[up][i]);
      }
      up++;
      if (up > down) {
        break;
      }
      for (int i = up; i <= down; i++) {
        list.add(matrix[i][right]);
      }
      right--;
      if (right < left) {
        break;
      }
      for (int i = right; i >= left; i--) {
        list.add(matrix[down][i]);
      }
      down--;
      if (up > down) {
        break;
      }
      for (int i = down; i >= up; i--) {
        list.add(matrix[i][left]);
      }
      left++;
      if (right < left) {
        break;
      }
    }
    return list;
  }
}

4. 总结

  1. list的用法——JAVAlist的用法
  2. 二维数组的用法——JAVA二维数组的用法


相关文章
|
7月前
【一刷《剑指Offer》】面试题 20:顺时针打印矩阵
【一刷《剑指Offer》】面试题 20:顺时针打印矩阵
|
7月前
|
Java
每日一题《剑指offer》数组篇之顺时针打印矩阵
每日一题《剑指offer》数组篇之顺时针打印矩阵
61 0
每日一题《剑指offer》数组篇之顺时针打印矩阵
|
7月前
|
算法
算法题—顺时针打印矩阵
算法题—顺时针打印矩阵
54 0
|
7月前
剑指 Offer 29:顺时针打印矩阵
剑指 Offer 29:顺时针打印矩阵
42 0
|
算法 C++
剑指offer(C++)-JZ29:顺时针打印矩阵(算法-模拟)
剑指offer(C++)-JZ29:顺时针打印矩阵(算法-模拟)
剑指offer 28. 顺时针打印矩阵
剑指offer 28. 顺时针打印矩阵
56 0
剑指offer_数组---顺时针打印矩阵
剑指offer_数组---顺时针打印矩阵
52 0
|
算法
算法练习题(七)——顺时针打印二维数组
算法练习题(七)——顺时针打印二维数组
114 0
|
Java C++
环形矩阵(螺旋矩阵)&&蛇形矩阵
环形矩阵(螺旋矩阵)&&蛇形矩阵
154 0
|
算法 前端开发 程序员
顺时针打印矩阵
顺时针打印矩阵
顺时针打印矩阵