文章目录
转圈打印矩阵
1.题目
初始序列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。
2.算法思路
一个矩阵的形状和位置是由A、B两个点控制的。一定要注意,A与B的坐标是与二维数组的索引挂钩的,即(行号,列号),不能直接理解成坐标系中的横纵坐标。
- 构造一个打印函数,每次打印前先进行判断,如果A与B同行不同列,那么横向打印。若A与B同列不同行,那么同列打印(同什么打印什么)。
- 同时,设置一个初始化函数来确定AB两点,同时,每次调用步骤1的函数,就相当于与把当前矩阵的外圈打印了一遍,这时,需要更新AB两点的坐标,来打印内圈的矩阵,以此类推,直到AB两点重合。
注:
二维数组的形式如下
int[][] = new int[3][4]
1、2、3、4
5、6、7、8
9、10、11、12
matrix.length = 3
matrix[0].length = 4
3.算法代码
public class demotest {
public static void main(String[] args) {
int[][] matrix = {
{
1, 2, 3, 4 }, {
5, 6, 7, 8 }, {
9, 10, 11, 12 },
{
13, 14, 15, 16 } };
fuction(matrix);
}
public static void fuction(int[][] matrix){
int a = 0;
int b = 0;
int c = matrix.length-1; //二维数组的行数
int d = matrix[0].length-1; //二维数组的列数
while(a<=c && b<=d){
circlePrintMatrix(matrix,a++,b++,c--,d--);
}
}
public static void circlePrintMatrix(int[][] matrix,int a,int b,int c,int d){
if(a == c){
for(int i=b;i<=d;i++){
System.out.println(matrix[a][i]);
}
}else if(b == d){
for(int i=a;i