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 版权协议,转载请附上原文出处链接和本声明。