【笔试】37、顺时针打印矩阵

本文介绍了一个矩阵顺时针打印算法,并提供了一个测试类验证实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


/****************************************************************************************
 *题目:顺时针打印矩阵
 *		输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵
 *		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
 *时间:2015年8月31日09:02:36
 *文件:MergeLink.java
 *作者:cutter_point
 ****************************************************************************************/
package bishi.Offer50.y2015.m08.d31;

public class MatrixCircle
{
	private int numbers[][];
	
	public MatrixCircle()
	{
	}
	//构造函数
	public MatrixCircle(int nums[][])
	{
		numbers = nums;
	}
	
	/**
	 * 打印一圈
	 * @param start
	 */
	private void printCircle(int start)
	{
		int rows = numbers.length;
		int columns = numbers.clone().length;
		
		int endColumn = columns - 1 - start;
		int endRow = rows - 1 - start;
		
		//从左到右
		for(int i = start; i <= endColumn; ++i)
		{
			int number = numbers[start][i];
			System.out.print(number + "\t");
		}//for
		
		//从上到下
		if(endRow > start)
		{
			for(int i = start + 1; i <= endRow; ++i)
			{
				int number = numbers[i][endColumn];
				System.out.print(number + "\t");
			}//for
		}//if
		
		//从右到左
		if(start < endColumn && start < endRow)
		{
			for(int i = endColumn - 1; i >= start; --i)
			{
				int number = numbers[endRow][i];
				System.out.print(number + "\t");
			}//for
		}//if
		
		//从下到上
		if(start < endRow - 1 && start < endColumn)
		{
			for(int i = endRow - 1; i > start; --i)
			{
				int number = numbers[i][start];
				System.out.print(number + "\t");
			}//for
		}//if
		
		System.out.println();
	}
	
	/**
	 * 输入我们矩阵
	 */
	public void printMaxtrixClockwisely()
	{
		if(numbers == null)
			return;
		
		int start = 0;
		int rows = numbers.length;
		int columns = numbers.clone().length;
		//我们终止的条件是,start到了中间位置
		while(start * 2 < rows && start * 2 < columns)
		{
			this.printCircle(start);
			++start;
		}//while
	}
	
}


我发现了junit的测试的时候,要求这个类的构造函数是一个public并且是无参数的类,所以我们这个构造函数里面有参数,所以我们得重新写个测试类


package bishi.Offer50.y2015.m08.d31;

public class Test
{
	@org.junit.Test
	public void Test()
	{
		int numbers[][] = 
			{
				{1,2,3,4},
				{5,6,7,8},
				{9,10,11,12},
				{13,14,15,16}
			};
		MatrixCircle mc = new MatrixCircle(numbers);
		mc.printMaxtrixClockwisely();
	}
}



OutPut:


1 2 3 4 8 12 16 15 14 13 9 5
6 7 11 10
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值