题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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.
练习地址
lc
实现1
class Solution {
public int[] spiralOrder(int[][] matrix) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0)
return new int[0];
int l = 0; //左边界
int r = matrix[0].length - 1;//右
int t = 0; //上
int b = matrix.length - 1; //下
int k = 0;
int[] res = new int[(r + 1) * (b + 1)];
while (true) {
for (int i = l; i <= r; i++) { //左->右
res[k++] = matrix[t][i];
}
if (++t > b) break;
for (int i = t; i <= b; i++) { //上->下
res[k++] = matrix[i][r];
}
if (l > --r) break;
for (int i = r; i >= l; i--) {// 左->右
res[k++] = matrix[b][i];
}
if (t > --b) break;
for (int i = b; i >= t; i--) {//下->上
res[k++] = matrix[i][l];
}
if (++l > r) break;
}
return res;
}
}
实现2
jz:
/**29 顺时针打印矩阵*/
public class C29_matrix_PrintMatrix {
public ArrayList<Integer> printMatrix(int [][] matrix) {
return null;
}
//循环结束条件:选取左上角(start,start)
//cols>startX*2 && rows>startY*2
static void printMatrix2(int[][] matrix) {
if (matrix == null || matrix.length <= 0 || matrix[0].length <= 0) return;
int rows = matrix.length;
int cols = matrix[0].length;
int start = 0;
while (cols > start * 2 && rows > start * 2) {
printMatrixInCirele(matrix, cols, rows, start);
++start;
}
}
static void printMatrixInCirele(int[][] matrix, int cols, int rows, int start) {
int endX = cols - 1 - start;
int endY = rows - 1 - start;
// 从左到右打印一行
for (int i = start; i <= endX; ++i) {
System.out.print(matrix[start][i] + " ");
}
//从上到下打印一列
if (start < endY) {
for (int i = start + 1; i <= endY; i++) {
System.out.print(matrix[i][endY] + " ");
}
}
//从左到右打印一行
if (start < endX && start < endY) {
for (int i = endX - 1; i >= start; --i) {
System.out.print(matrix[endY][i] + " ");
}
}
//从上到下打印一列
if (start < endX && start < endY - 1) {
for (int i = endX - 1; i >= start + 1; --i) {
System.out.print(matrix[i][start] + " ");
}
}
}
}
Test
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}};
printMatrix2(matrix);
}