js实现螺旋矩阵算法
来源:互联网 发布:淘宝寄到海外 编辑:程序博客网 时间:2024/05/17 04:32
Q:用0-9填充一个N*N的矩阵,该矩阵按顺时针旋转方向依次增大,用js编程输出这个数组。要求如下:
[0, 1, 2, 3, 4]
[5, 6, 7, 8, 5]
[4, 3, 4, 9, 6]
[3, 2, 1, 0, 7]
[2, 1, 0, 9, 8]我的思路先生成一个一维的数组;
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4]
//这里实现的算法是通过略微修改了d3.range();function range_(start, stop, step) { if (arguments.length < 3) { step = 1; if (arguments.length < 2) { stop = start; start = 0; } } if ((stop - start) / step === Infinity) throw new Error("infinite range"); var range = [], k = range_integerScale(Math.abs(step)), i = -1, j; start *= k, stop *= k, step *= k; if (step < 0) while ((j = start + step * ++i) > stop) range.push(range_interger_10(j / k)); else while ((j = start + step * ++i) < stop) range.push(range_interger_10(j / k)); return range; }; function range_integerScale(x) { var k = 1; while (x * k % 1) k *= 10; return k; } function range_interger_10(a) { a = a >= 10 ? range_interger_10(a % 10) : a; return a; }
然后通过算法实现index变化;对应赋值;方式有点蠢,通过实现还有有所收获的;
var c = { "index": 1, "fuhao": -1 } var r = { "index": 1, "fuhao": -1 } var step = n - 1; var jo = 0; var i = 1; var _ = 0; var direction = { 0: function() { c["direction "] = -Math.abs(c["direction "]) return c }, 1: function() { r["direction "] = -Math.abs(r["direction "]) return r }, 2: function() { c["direction "] = Math.abs(c["direction "]) return c }, 3: function() { r["direction "] = Math.abs(r["direction "]) return r } } var cishu = 0; while (i <= cell.length) { arr[r["index"] - 1][c["index"] - 1] = cell[i - 1]; var step_num = Math.floor((i - 1) / ((n - 1) * 3)) == 0 ? 3 : 2; if (i - jo <= step) { var s = direction[_ % 4](); s["index"] = s["index"] - s["direction "] if (i - jo == step) { _++; jo = i; cishu++; if (cishu == step_num) { step--; cishu = 0 } } } i++ }
完整code
function circleNum(n) { var arr = new Array(n); for (var i = 0; i < arr.length; i++) { arr[i] = new Array(n); }; // var length = n * n; var cell = range_(length) console.log(cell) var c = { "index": 1, "direction": -1 } var r = { "index": 1, "direction": -1 } var step = n - 1; var jo = 0; var i = 1; var _ = 0; var direction = { 0: function() { c["direction"] = -Math.abs(c["direction"]) return c }, 1: function() { r["direction"] = -Math.abs(r["direction"]) return r }, 2: function() { c["direction"] = Math.abs(c["direction"]) return c }, 3: function() { r["direction"] = Math.abs(r["direction"]) return r } } var cishu = 0; while (i <= cell.length) { arr[r["index"] - 1][c["index"] - 1] = cell[i - 1]; var step_num = Math.floor((i - 1) / ((n - 1) * 3)) == 0 ? 3 : 2; if (i - jo <= step) { var s = direction[_ % 4](); s["index"] = s["index"] - s["direction"] if (i - jo == step) { _++; jo = i; cishu++; if (cishu == step_num) { step--; cishu = 0 } } } i++ } function range_(start, stop, step) { if (arguments.length < 3) { step = 1; if (arguments.length < 2) { stop = start; start = 0; } } if ((stop - start) / step === Infinity) throw new Error("infinite range"); var range = [], k = range_integerScale(Math.abs(step)), i = -1, j; start *= k, stop *= k, step *= k; if (step < 0) while ((j = start + step * ++i) > stop) range.push(range_interger_10(j / k)); else while ((j = start + step * ++i) < stop) range.push(range_interger_10(j / k)); return range; }; function range_integerScale(x) { var k = 1; while (x * k % 1) k *= 10; return k; } function range_interger_10(a) { a = a >= 10 ? range_interger_10(a % 10) : a; return a; } for (var ii = 0; ii < n; ii++) { console.log(arr[ii]) } return arr;}
阅读全文
0 0
- js实现螺旋矩阵算法
- 螺旋矩阵算法代码实现
- 螺旋矩阵算法java实现
- 螺旋矩阵算法java实现
- 螺旋矩阵算法 java实现
- 螺旋矩阵、螺旋队列算法
- 螺旋矩阵算法
- 螺旋矩阵算法
- 螺旋矩阵算法
- 螺旋矩阵(算法)
- Java螺旋矩阵算法
- 螺旋矩阵的算法
- 螺旋矩阵(c实现)
- 螺旋矩阵编程实现
- java 实现螺旋矩阵
- java实现螺旋矩阵
- 螺旋矩阵实现
- 螺旋矩阵的实现
- gtest各项参数
- thinkphp 图片上传生成缩略图
- Java中list对象的三种遍历方式
- TabLayout、ViewPager、FragmentPagerAdapter实现新闻导航栏
- 61_数组_多维数组_练习_矩阵运算
- js实现螺旋矩阵算法
- 九度oj-1013-开门人和关门人
- Unique Paths
- PyQuery 文档标注
- hihoCoder1050— 树中的最长路(深搜)
- 6.3 有限字长效应
- tomcat 使用log4j做日志分隔
- 1059. C语言竞赛(20) PAT
- 数学游戏“数三角形”的可编程图论模型