多维数组和矩阵之顺时针打印二维数组
题目描述:
输入一个矩阵,按照从外向里以顺时针打印出每一个数字,例如:输入如下矩阵,
则依次打印出的数字为:
1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10
算法思路
打印顺序如图所示:
顺时针打印,从外到里,不失普遍性针对所有循环圈都是:
第一步: 先打印上面一条边,再打印右边一条边,再打印下面一条边,最后打印左边一条边。打印一圈以后,左上角的指针像右下角移动,右下角的元素指针向左上角移动,即
第二步: 之后便是循环执行第一步的逻辑
第三步: 那么什么时候循环终止呐?就是当左上角的行指针大于右下角的行指针 或 左上角的列指针大于右下角的列指针 时,循环终止,此时顺时针打印全部完成。
代码实现
public class _01_顺时针打印二维数组 {
public static void main(String[] args) {
int[][] matrix = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
};
printMatrix(matrix);
}
//顺时针打印二维数组
static void printMatrix(int [][] matrix) {
int leftUpRow = 0,//循环打印圈的左上角元素的行指针
leftUpCol = 0,//循环打印圈的左上角元素的列指针
rightDownRow = matrix.length - 1, //循环打印圈的右下角角元素的行指针
rightDownCol = matrix[0].length -1;//循环打印圈的右下角角元素的列指针
while (leftUpRow <= rightDownRow && leftUpCol <= rightDownCol) {
//上面一条边
int r = leftUpRow,c = leftUpCol;
while (c <= rightDownCol) {
System.out.print(matrix[r][c++]+" ");
}
//右边一条边
r ++;
c = rightDownCol;
while (r <= rightDownRow) {
System.out.print(matrix[r++][c]+" ");
}
//下面一条边
r = rightDownRow;
c --;
while (c >= leftUpCol) {
System.out.print(matrix[r][c--]+" ");
}
//左边一条边
r --;
c = leftUpCol;
while (r > leftUpRow) {
System.out.print(matrix[r--][c]+" ");
}
leftUpRow ++;leftUpCol ++;
rightDownRow --;rightDownCol -- ;
}
}
}