本帖最后由 cat73 于 2015-8-13 14:18 编辑
看到别人用Java写,我就用JS做了个:http://bbs.itheima.com/thread-224667-1-1.html
我自己研究算法的时候喜欢用JS- -
原因是语法简单,不像Java需要那么多东西- -
以及不需要开IDE,浏览器即可调试OK上代码:
- !function() {
- /**
- * 输出螺旋数列
- * @param size 要输出的矩阵的长与宽
- * @param startNum 从哪个数字开始输出
- * @param directions 方向列表,应该为正好包含4个整数的数组,1上2下3左4右
- * @param startX 开始X坐标
- * @param startY 开始Y坐标
- */
- function xxx(size, startNum, directions, startX, startY, numStep) {
- // 初始化存储区域
- var array = [];
- for (var i = 0; i < size; i++) {
- array[i] = [];
- }
- // 生成数字
- var s = size; // 当前的输出大小
- var n = 1; // 还有几次循环要减少输出大小
- var directionID = 0; // 当前输出方向
- var x = startX; // 当前的x坐标
- var y = startY; // 当前的y坐标
- var num = startNum; // 当前的数字
- //首先对开始坐标进行修正
- var firstDirection = directions[directionID];
- if (firstDirection == 1) {
- x++;
- } else if (firstDirection == 2) {
- x--;
- } else if (firstDirection == 3) {
- y++;
- } else {
- y--;
- }
- //主要输出循环
- while (s > 0) {
- // 生成一行或者一列数字
- var direction = directions[directionID]; //本次输出的方向
- for (var i = 0; i < s; i++) {
- // 首先根据方向计算出输出的目标坐标
- if (direction == 1) {
- x--;
- } else if (direction == 2) {
- x++;
- } else if (direction == 3) {
- y--;
- } else {
- y++;
- }
- // 然后将目标数字输出到指定坐标
- array[x][y] = num;
- num += numStep;
- }
- // 控制输出大小的缩小
- n--;
- if (!n) {
- n = 2;
- s--;
- }
- // 控制方向的更变
- directionID++;
- if (directionID == 4) {
- directionID = 0;
- }
- }
-
- // 准备结果
- var result = "";
- for (var i = 0; i < size; i++) {
- for(var j = 0; j < size; j++) {
- result += array[i][j] + "\t";
- }
- result += "\n";
- }
- //返回结果
- return result;
- }
- //演示: 顺时针输出
- var str = xxx(10, 1, [4, 2, 3, 1], 0, 0, 1);
- console.log(str);
- //演示: 逆时针输出
- var str = xxx(9, 1, [2, 4, 1, 3], 0, 0, 1);
- console.log(str);
- //演示: 从右下角开始的逆时针输出
- var str = xxx(9, 1, [1, 3, 2, 4], 8, 8, 1);
- console.log(str);
- //演示: 从右上角开始的顺时针输出 从200开始每次减2
- var str = xxx(9, 200, [2, 3, 1, 4], 0, 8, -2);
- console.log(str);
- }();
复制代码
输出:
- 1 2 3 4 5 6 7 8 9 10
- 36 37 38 39 40 41 42 43 44 11
- 35 64 65 66 67 68 69 70 45 12
- 34 63 84 85 86 87 88 71 46 13
- 33 62 83 96 97 98 89 72 47 14
- 32 61 82 95 100 99 90 73 48 15
- 31 60 81 94 93 92 91 74 49 16
- 30 59 80 79 78 77 76 75 50 17
- 29 58 57 56 55 54 53 52 51 18
- 28 27 26 25 24 23 22 21 20 19
- 1 32 31 30 29 28 27 26 25
- 2 33 56 55 54 53 52 51 24
- 3 34 57 72 71 70 69 50 23
- 4 35 58 73 80 79 68 49 22
- 5 36 59 74 81 78 67 48 21
- 6 37 60 75 76 77 66 47 20
- 7 38 61 62 63 64 65 46 19
- 8 39 40 41 42 43 44 45 18
- 9 10 11 12 13 14 15 16 17
- 17 16 15 14 13 12 11 10 9
- 18 45 44 43 42 41 40 39 8
- 19 46 65 64 63 62 61 38 7
- 20 47 66 77 76 75 60 37 6
- 21 48 67 78 81 74 59 36 5
- 22 49 68 79 80 73 58 35 4
- 23 50 69 70 71 72 57 34 3
- 24 51 52 53 54 55 56 33 2
- 25 26 27 28 29 30 31 32 1
- 152 150 148 146 144 142 140 138 200
- 154 100 98 96 94 92 90 136 198
- 156 102 64 62 60 58 88 134 196
- 158 104 66 44 42 56 86 132 194
- 160 106 68 46 40 54 84 130 192
- 162 108 70 48 50 52 82 128 190
- 164 110 72 74 76 78 80 126 188
- 166 112 114 116 118 120 122 124 186
- 168 170 172 174 176 178 180 182 184
复制代码
|
|