螺旋打印数组

  • Post author:
  • Post category:其他




1. 问题描述

  螺旋数组就是扣边界进行打印



2. 给定两个点组成的框

螺旋打印给定矩阵中的两个点围城的圈(方圈)

先往右走 最右时往下走 最下时往左走,最左时往上走

public class SpiralOrder {
    /**
     * 螺旋打印给定矩阵中的两个点围城的圈(方圈)
     * 先往右走 最右时往下走 最下时往左走,最左时往上走
     * @param m 矩阵
     * @param upRow 左上点的行坐标
     * @param upCol 左上点的列坐标
     * @param downRow 右下点的行坐标
     * @param downcol 右下点的列坐标
     */
    static void printEdge(int[][] m, int upRow, int upCol, int downRow, int downcol) {
        int maxCol = downcol - upCol;
        int maxRow = downRow - upRow;
        if (maxCol == 0) {
            // 只有一列
            for (int i=0;i<=maxRow;i++) {
                print(m[upRow+i][upCol]);
            }
            return;
        }
        if (maxRow == 0) {
            // 只有一行
            for (int i = 0;i<=maxCol;i++) {
                print(m[upRow][upCol+i]);
            }
            return;
        }

        int row = 0;
        int col = 0;
        while (col < maxCol) {
            print(m[upRow][upCol + col]);
            col++;
        }
        while (row < maxRow) {
            print(m[upRow + row][downcol]);
            row++;
        }

        while (col > 0) {
            print(m[downRow][upCol + col]);
            col--;
        }
        while (row > 0) {
            print(m[upRow + row][upCol]);
            row--;
        }
    }

    static void print(int num) {
        System.out.print(num + " ");
    }

    static void spiralOrder(int[][] matrix) {
        int tR = 0;
        int tC = 0;
        int dR = matrix.length - 1;
        int dC = matrix[0].length - 1;
        while (tR <= dR && tC <= dC) {
            printEdge(matrix, tR++, tC++, dR--, dC--);
        }
    }

    public static void main(String[] args) {
        int[][] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 },
                { 13, 14, 15, 16 } };
        spiralOrder(matrix);

    }

}

问题比较简单,就是各种边界很繁琐



版权声明:本文为weixin_37888569原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。