矩阵打印之转圈打印、之字形打印
矩阵打印也是经常会使用到的要求掌握的算法,在此介绍一下转圈打印和之字形打印的方法。因为并不复杂直接看代码就可以看懂,也写了注释,所以直接贴上代码。才疏学浅,若有错误欢迎大家多多指出,一定虚心接受。
转圈打印
package Main;
/**
* @author Leslie
*
*/
public class Main {
public static void printMatrixByCircle(int[][] matrix) {
if (matrix == null) {
return;
}
int aR = 0;
int aC = 0; //左上角的点的横纵坐标
int bR = matrix.length - 1;
int bC = matrix[0].length - 1; //右下角点的横纵坐标
while (aR <= bR && aC <= bC) {
printMatrixByCircle(matrix, aR++, aC++, bR--, bC--); //每次打印外圈
}
}
public static void printMatrixByCircle(int[][] matrix, int aR, int aC, int bR, int bC) {
if (aR == bR) {
for (; aC <= bC; aC++) {
System.out.print(matrix[aR][aC] + " ");
}
} else if (aC == bC) {
for (; aR <= bR; aR++) {
System.out.print(matrix[aR][aC] + " ");
}
} else {
int curR = aR;
int curC = aC;
while (curC < bC) {
System.out.print(matrix[curR][curC++] + " ");
}
while (curR < bR) {
System.out.print(matrix[curR++][curC] + " ");
}
while (curC > aC) {
System.out.print(matrix[curR][curC--] + " ");
}
while (curR > aR) {
System.out.print(matrix[curR--][curC] + " ");
}
}
}
/*
* 主函数测试
*/
public static void main(String[] args) {
int [][] matrix = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}
};
printMatrixByCircle(matrix);
}
}
之字形打印
package Main;
/**
* @author Leslie
*
*/
public class Main {
/*
* 之字形打印
*/
public static void printMatrixByZigzag(int [][]matrix) {
if (matrix == null) {
return;
}
int bR = 0;
int bC = 0; //左下角的点的坐标
int aR = 0;
int aC = 0; //右上角的点的坐标
int rec = matrix.length -1; //最大行
int col = matrix[0].length -1; //最大列
boolean fromUp = false;
while(aR<=rec && bC<=col) {
printDiagonal(matrix, aR, aC, bR, bC, fromUp);
aR = aC == col?aR+1:aR;
aC = aC == col?aC:aC+1;
bC = bR == rec?bC+1:bC;
bR = bR == rec?bR:bR+1;
fromUp = !fromUp;
}
}
/*
* 打印对角线
*/
public static void printDiagonal(int [][]matrix, int aR, int aC, int bR, int bC, boolean fromUp) {// 右上角(aR,aC) 左下角(吧R,bC)
if (fromUp) {
while(aR<=bR) {
System.out.print(matrix[aR++][aC--]+" ");
}
}else {
while(bR>=aR) {
System.out.print(matrix[bR--][bC++]+" ");
}
}
}
/*
* 主函数测试
*/
public static void main(String[] args) {
int [][] matrix = {
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
};
printMatrixByZigzag(matrix);
}
}