黑马程序员技术交流社区
标题:
JS版螺旋矩阵(跟Java代码差不多的啦~)
[打印本页]
作者:
cat73
时间:
2015-8-13 14:13
标题:
JS版螺旋矩阵(跟Java代码差不多的啦~)
本帖最后由 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
复制代码
作者:
耀阳圣尊
时间:
2015-8-13 14:39
赞一个,不错不错
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2