`
zl378837964
  • 浏览: 190876 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

深圳公司一道面试题

    博客分类:
  • java
阅读更多
  
  前几天,在别人博客上见到一个面试题,就看看吧:
  要求打印出:
int i=5; 
1  2  3  4  5 
16 17 18 19 6 
15 24 25 20 7 
14 23 22 21 8 
13 12 11 10 9 
 
int i=6 
1  2  3  4  5   6 
20 21 22 23 24  7 
19 32 33 34 25  8 
18 31 36 35 26  9 
17 30 29 28 27 10 
16 15 14 13 12 11 
上午没事就试了一下,还好,单层循环,效率还好吧;
贴出来和兄弟们共享一下啦~~~


package com.pdsu.zhang;

public class Interview_MartixPrint {
	/**
	 * @param args
	 * @author zhangli
	 * 
	 * @param layer 每层的数组长宽
	 * @param arr   递归的层数
	*/
	static int len=1;
	static void get(int layer ,int[][] arr){
			int width =arr.length-2*layer;  // 每层的数组长宽
			int i=layer,j=layer;			// 每层的起点坐标
			int flag=1;						// 旋转标记
			int end=width*2+2*(width-2);	// 每层的个数
			for (int k=0; k<=end; k++) {
				if(flag==1)	{
					arr[i][j]=len;
					j++;
					if(j==arr.length-layer){
						j--;
						flag=2;
					}
				}	
				if(flag==2)	{
					arr[i][j]=len;
					i++;
					if(i==arr.length-layer)
					{
						i--;
						flag=3;
					}
				}
				if(flag==3)	{
					arr[i][j]=len;
					j--;
					if(j==-1+layer)
					{
						j++;
						flag=4;
					}
				}
				if(flag==4)	{
					if(i==layer)
					{
						get2(layer+1,arr);
					}else{
						arr[i][j]=len;
						i--;
					}					
				}
				
				len++;
				if(len>arr.length*arr.length)
					break;				
			}
		}
		
	static void toString(int[][] arr){
			for (int[] o : arr) {
				for (int t : o) {
					System.out.print(t+" ");  
					for(int k=0;k < (int)Math.log10(arr.length*arr.length)-(int)Math.log10(t);k++)    
					System.out.print(" ");    
				}
				System.out.println();
			}
		}
	public static void main(String[] args) {
		int num=20;
		int[][] arr=new int[num][num];
		get(0 ,arr);
		toString(arr);		
	}
}


欢迎指正,

如有更好方法,就说说呗
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics