循环打印矩阵(算法)

题目:给定一个矩阵matrix,从第一个元素开始循环打印矩阵,例如:

在这里插入图片描述
打印结果为:1,5,6,8,3,8,3,7,6,1,6,6,2,7,2,8。

算法思想:循环打印矩阵可以分而治之,即先打印最外围的一圈,依次往里推则可解决该问题。

打印最外围方法如下:定义一个动点P(curR,curC),初始时curR=row1,curC=col1,①curC递增(终止条件为curC=col2),②curR递增(终止条件为curR=row2),③curC递减(终止条件为curC=col1),④curR递减(终止条件为curR=row1)。这样矩阵外围就按照条件打印出来了,然后将点A,B分别往中心移动一次,即row1++,col1++;row2–,col2–,重复上述四个步骤即可。

算法代码如下:

package test_class_03;

public class PrintMatrixSpiralOrder {
	
	public static void SpiralOrderPrint(int [][]Matrix){
		int row1=0;
		int col1=0;
		int row2=Matrix.length-1;
		int col2=Matrix[0].length-1;
		while(row1 <= row2 && col1 <= col2){
			printSqure(Matrix,row1++,col1++,row2--,col2--);
		}
		System.out.println();
	}
	
	public static void printSqure(int [][]Matrix,int row1,int col1,int row2,int col2){
		int curR=row1;
		int curC=col1;
		if(row1==row2){
			while(curC!=col2+1){
				System.out.print(Matrix[curR][curC++]+" ");
			}
		}else if(col1==col2){
			while(curR!=row2+1){
				System.out.print(Matrix[curR++][curC]+" ");
			}
		}else{
			while(curC!=col2){
				System.out.print(Matrix[curR][curC++]+" ");
			}
			while(curR!=row2){
				System.out.print(Matrix[curR++][curC]+" ");
			}
			while(curC!=col1){
				System.out.print(Matrix[curR][curC--]+" ");
			}
			while(curR!=row1){
				System.out.print(Matrix[curR--][curC]+" ");
			}
		}
	}
	
	public static void main(String[] args) {
		int [][]m={{4,5,6,8},{6,2,7,3},{6,8,2,8},{1,6,7,3}};
		SpiralOrderPrint(m);
	}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值