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

逆时针打印矩阵

时间:2014-11-27 14:33:54      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:blog   http   ar   sp   java   for   on   数据   2014   

   研究生的生活好无聊,最近想出去找找实习了。就复习一下数据结构,大一学的,也没复习过,面试的时候被鄙视了。    看到一个学姐发的,应该是金山的笔试题目:

   给一个矩阵,将矩阵逆时针打印出来,如:  

1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
    逆时针打印出来当然是:1 2 3 4 5...14 15 16

    乍一看,这题目很简单,就是两个循环就可以搞定。其实,没有想的那么简单,因为每次循环后,循环体都发生了变化。参考了网上的一些解题思路,现在说一下我的思路。

    bubuko.com,布布扣

         1.定义一个方向d=(d+1)%4,那么d=0,1,2,3表示四个方向

          2.打印矩阵当前的行col:k->j,列为row:m->n,初始条件:col=0,row=0,k=0,j=3,m=0,n=3

          3,当打印第一列后,k+=1,col=n

          4,当打印最后一行后,n-=1,row=j

          5,打印最后一列,j-=1,col=m

          6,打印第一行,m+=1,row=k

          ...

          7.终止条件:m==n&&k==j

下面贴出我用java写的代码:

int [][]p={{1,12,11,10,},{2,13,16,9},{3,14,15,8},{4,5,6,7}};     
        int col=0,row=0;//当前的列和行
        int m=0,n=3,k=0,j=3;//col:m->n  row:k->j
        int d=-1;//表示方向
        while(true)
        {
        	d=(d+1)%4;
	        switch (d)
			{
			case 0:
				for(int i=m;i<=n;i++ )
				{
					System.out.print(p[i][row]+" ");
				}
				col=n;
				k+=1;//防止重复
				
				break;
			case 1:
				for(int i=k;i<=j;i++)
				{
					System.out.print(p[col][i]+" ");
				}
				row=j;
				n-=1;//防止重复
				
				break;
			case 2:
				for(int i=n;i>=m;i--)
				{
					System.out.print(p[i][row]+" ");
				}
					col=m;
					j-=1;
				
				break;
			case 3:
				for(int i=j;i>=k;i--)
				{
					System.out.print(p[col][i]+" ");
				}
			    row=k;
				m+=1;
				
				break;
			default:
				break;
			}
	        if(m==n&&k==j)
	        {
	        	break;
	        }
        }


逆时针打印矩阵

标签:blog   http   ar   sp   java   for   on   数据   2014   

原文地址:http://blog.csdn.net/yilip/article/details/41544895

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