码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-08-31 11:52:53      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:java   剑指offer   笔试   


/****************************************************************************************
 *题目:顺时针打印矩阵
 *		输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵
 *		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
















版权声明:本文为博主原创文章,未经博主允许不得转载。

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

标签:java   剑指offer   笔试   

原文地址:http://blog.csdn.net/cutter_point/article/details/48131189

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!