A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fluency 中级黑马   /  2015-1-20 15:44  /  1007 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

自己做出来了 但耗了不少脑细胞 代码: 问问 有没有 更好更简单的思路
  1. public class Test9 {
  2.         public static void main(String[] args) {
  3.                 int[][] matrix = new int[8][8];
  4.                 aRound(matrix, matrix.length, 0, 1);

  5.                 for (int i = 0; i < matrix.length; i++) {
  6.                         for (int j = 0; j < matrix.length; j++) {
  7.                                 System.out.print(matrix[i][j] + "\t");
  8.                         }
  9.                         System.out.println();
  10.                         System.out.println();
  11.                 }
  12.         }

  13.         /**
  14.          * @param matrix
  15.          *            矩阵
  16.          * @param size
  17.          *            规模
  18.          * @param time
  19.          *            递归次数
  20.          * @param startNum
  21.          *            赋值 初值
  22.          */
  23.         private static void aRound(int[][] matrix, int size, int time, int startNum) {
  24.                 // TODO Auto-generated method stub

  25.                 if (size > 0) {
  26.                         if (size == 1) {
  27.                                 matrix[matrix.length / 2][matrix.length / 2] = startNum;// 打印中心点
  28.                         } else {
  29.                                 int row = time;// 行坐标与递归次数相同
  30.                                 int colum = time;// 列坐标与递归次数相同
  31.                                 int counter = size * size - (size - 2) * (size - 2);// 设置当前递归赋值一圈的赋值次数的计数器,正好是矩阵掏出“空心”
  32.                                 for (int i = 0; i < counter; i++) {
  33.                                         if (i < size - 1) {
  34.                                                 // 方向向右,行不变,列增加
  35.                                                 matrix[row][colum++] = startNum++;
  36.                                         } else if (i < 2 * (size - 1)) {
  37.                                                 // 方向向下,行数递加,列数不变
  38.                                                 matrix[row++][colum] = startNum++;
  39.                                         } else if (i < 3 * (size - 1)) {
  40.                                                 // 方向向左,行数不变,列数递减
  41.                                                 matrix[row][colum--] = startNum++;
  42.                                         } else {
  43.                                                 // 方向向上,行递减,列不变
  44.                                                 matrix[row--][colum] = startNum++;
  45.                                         }
  46.                                 }
  47.                                 time++;
  48.                                 // 每次递归规模矩阵规模减2
  49.                                 size = size - 2;
  50.                                 // 递归
  51.                                 aRound(matrix, size, time, startNum);
  52.                         }
  53.                 }
  54.         }
  55. }
复制代码



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马