黑马程序员技术交流社区

标题: 一道题的代码,据说是面试题 [打印本页]

作者: szw727    时间: 2015-5-9 18:19
标题: 一道题的代码,据说是面试题
写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。如: n = 4 则打印:
1        2        3        4       
12        13        14        5       
11        16        15        6       
10        9        8        7

直接调用show3(4); 即可,功能都在show2中
  1. public static void show3(int n)
  2.         {
  3.                 int[][] array = new int[n][n];
  4.                 int number = 1;
  5.                 int time = n/2;
  6.                 show2(array, 0, n, number, time);
  7.                
  8.                 if(n%2 == 1)
  9.                 {
  10.                         array[n/2][n/2] = n*n;
  11.                 }
  12.                
  13.                 for(int i=0; i<n; ++i)
  14.                 {
  15.                         for(int j=0; j<n; ++j)
  16.                         {
  17.                                 System.out.print(array[i][j]+ "\t");
  18.                         }
  19.                         System.out.println();
  20.                 }
  21.         }
  22.         public static void show2(int[][] array, int start, int end, int number, int times)
  23.         {
  24.                
  25.                 for(int i=start; i<end-1; ++i)
  26.                 {
  27.                         array[start][i] = number++;
  28.                 }
  29.                 for(int i=start; i<end-1; ++i)
  30.                 {
  31.                         array[i][end-1] = number++;
  32.                 }
  33.                 for(int i=end-1; i>start; --i)
  34.                 {
  35.                         array[end-1][i] = number++;
  36.                 }
  37.                 for(int i=end-1; i>start; --i)
  38.                 {
  39.                         array[i][start] = number++;
  40.                 }
  41.                 if(times>1)
  42.                 {
  43.                         show2(array, start+1, end-1, number, times-1);
  44.                 }
  45.         }
复制代码


作者: xgd6612    时间: 2015-5-9 18:28
.......很腻害的样子
作者: szw727    时间: 2015-5-9 18:31
xgd6612 发表于 2015-5-9 18:28
.......很腻害的样子

我看到网上写的太复杂,就自己写了一个
作者: leelio    时间: 2015-5-9 18:40
不明觉厉
作者: xgd6612    时间: 2015-5-9 18:44
szw727 发表于 2015-5-9 18:31
我看到网上写的太复杂,就自己写了一个

以前遇到过一个这样的帖子,和你代码很像,而且还加了一个技术分~~~~~~~~~~~~~~~~所以记忆深刻

作者: 1017161726    时间: 2015-5-9 19:04
思路都差不多。我发表过一个帖子,可以打印不是正方形的螺旋矩阵
作者: szw727    时间: 2015-5-9 19:07
xgd6612 发表于 2015-5-9 18:44
以前遇到过一个这样的帖子,和你代码很像,而且还加了一个技术分~~~~~~~~~~~~~~~~所以记忆深刻
...

如果迭代太困难,使用递归是一个好选择,我开始使用迭代,发现需要判断的情况太多,
结果发现一圈是一个规律,于是采用一次递归处理一圈,只需要调整传入数组的起始和结束点即可
作者: dengxing    时间: 2015-5-9 20:10
受教了!!!
作者: brouse    时间: 2015-5-9 20:59
这个叫螺旋数组
作者: bboyXiaoNuo    时间: 2015-5-9 21:12
不是螺旋矩阵吗?第四天的作业么。。。。。。
作者: 爱如kongcheng    时间: 2015-5-9 21:16
向大家保证不是面试题~~~大家学习一下倒是不错~~~
作者: Oh.Ba    时间: 2015-5-9 21:17
研究了很久,不会
作者: 曾勇    时间: 2015-5-9 21:25
学习了,
作者: 牛仔很忙fire    时间: 2015-5-9 21:31
这么吊。。
作者: 陈锐涛    时间: 2015-5-9 21:44
学习加膜拜~呀~~至少我还不会~
作者: Cat    时间: 2015-5-9 21:48
学习一下~
作者: 0416_张威    时间: 2015-5-9 22:11
这么复杂???
作者: ddddk    时间: 2015-5-9 22:30
前几天老师给的练习题 楼主能给语句注释一下就更容易看了
作者: lingdu    时间: 2015-5-9 22:33
厉害,学习了
作者: 黄冬    时间: 2015-5-9 22:47
涨姿势啦,赞
作者: Dracove    时间: 2015-5-10 10:04
看不懂,能不能加上注释
作者: 知来者之可追    时间: 2015-5-10 15:31
学习、学习。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2