顺时针输出一个二维数组的内容

这篇博客探讨了一道笔试题目,要求按顺时针顺序输出二维数组的内容。通过一个示例数组,作者展示了输出过程,并强调了该问题在实际笔试或面试中的挑战性。文章还提及了在解决问题时遇到的调试困难,提醒读者要熟练掌握此类算法。
摘要由CSDN通过智能技术生成

前几天在一道笔试题里看到的,要求输出一个二维矩阵的内容,比如,给定一个二维数组

  {{1, 2, 3, 10, 17},
 {4, 5, 6, 11, 18},
 {7, 8, 9, 12, 19},
 {13,14,15,16, 20},
 {21,22,23,24, 25}}

输出必须为1 2 3 10 17 18 19 20 25 24 23 22 21 13 7 4 5 6 11 12 16 15 14 8 9,

看似简单地题目花了不少时间来做,写起来不熟练,调试了很多次,如果是笔试或者面试手写的话肯定会挂掉,所以这里重新温习一下。

public class ClockwisePrint {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int [][] a = {{1, 2, 3, 4, 5},
		<span style="white-space:pre">	</span>      {4, 5, 6, 7, 8},
			      {7, 8, 9, 10, 6},
			     {27,18, 19,11, 10},
			      {1, 2, 3, 4,  5},
			      {4, 5, 6, 7,  8},
			      {7, 8, 9, 10, 6},
			      {1, 2, 3, 4,  5},
					  };
		ClockwisePrint c = new ClockwisePrint();
		c.colokWisePrint(a);
	}
	
	
	public void colokWisePrint(int a[][]){
		int width = a[0].length;
		int height = a.length;
		int startX = 0;
		int startY = 0;
		int endX = startX + height-1;
		int endY = startY + width -1;
		while(true){
			if(startX > endX || startY > endY)
				break;
			
			if(startX < endX && startY < endY){
				print(a, startX, startY, endX, endY);				
				startX ++;
				startY ++;
				endX --;
				endY --;
			}
				
			if(startY <=endY && startX == endX)//说明只有一行数据,输出由左至右即可
			{
				for(int i = startY ; i <= endY ; i++){
					System.out.print( a[startX][i] + " ");
				}	
				break;
			}
			if(startX <=endX && startY == endY){//说明只有一列数据,直接由上到下输出
				for(int i = startX ; i<= endX ; i++){
					System.out.print( a[i][startY] + " ");
				}
				break;
			}							
		}				
	}
	
	public void print(int [][] a,int startX,int startY,int endX,int endY){
		for(int i = startY;i<= endY ; i++){
			System.out.print(a[startX][i] + " " );//输出第一行数据
		}
		
		for(int i = startX+1 ; i <= endX ; i ++){
			System.out.print(a[i][endY] + " "); // 输出第一竖列数据
		}
		
		for(int i = endY-1 ; i >= startY ; i--){
			System.out.print(a[endX][i] + " ");//输出第二行数据
		}
		
		for(int i = endX-1 ; i >= startX+1 ; i--){
			System.out.print(a[i][startY] + " ");//输出最后一列数据
		}
		System.out.println();//打印换行以便层数的查看
	}

	
		
	
	
}
运行结果:

1 2 3 4 5 8 6 10 5 8 6 5 4 3 2 1 7 4 1 27 7 4 
5 6 7 10 11 4 7 10 9 8 5 2 18 8 
9 19 3 6 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值