JavaScript定义及输出螺旋矩阵的方法详解


Posted in Javascript onDecember 01, 2017

本文实例讲述了JavaScript定义及输出螺旋矩阵的方法。分享给大家供大家参考,具体如下:

昨晚无意看到这样一个算法题目,然后就想着用js来实现。
昨晚草草写完后感觉代码很丑,很臭,于是今晚又花点时间重构了一下,感觉变得优雅了。

什么是螺旋矩阵

螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环。

如图:

JavaScript定义及输出螺旋矩阵的方法详解

实现效果

JavaScript定义及输出螺旋矩阵的方法详解

实现代码

(function() {
  var map = (function() {
    function map(n) {
      this.map = [], this.row = 0, this.col = -1, this.dir = 0, this.n = n;
      // 建立个二维数组
      for (var i = 0; i < this.n; i++) { this.map.push([]); }
      // 定义移动的顺序为 右,下,左,上
      var order = [this.right, this.bottom, this.left, this.up];
      i = 0;
      do {
        // 能移动则更新数字,否则更改方向
        order[this.dir % 4].call(this) ? i++ : this.dir++;
        // 赋值
        this.map[this.row][this.col] = i;
      } while (i < n * n);
    }
    map.prototype = {
      print: function() { for (var i = 0; i < this.n; i++) { console.log(this.map[i].join(' ')) } },
      // 向该方向移动
      left: function() { return this.move(this.row, this.col - 1); },
      right: function() { return this.move(this.row, this.col + 1); },
      up: function() { return this.move(this.row - 1, this.col); },
      bottom: function() { return this.move(this.row + 1, this.col); },
      // 如果坐标在范围内,并且目标没有值,条件满足则更新坐标
      move: function(row, col) {
        return (0 <= row && row < this.n) && (0 <= col && col < this.n) && !this.map[row][col] && (this.row = row, this.col = col, true);
      },
    };
    return map;
  })();
  new map(6).print();
})();

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JS 自定义函数缺省值的设置方法
May 05 Javascript
JQuery验证工具类搜集整理
Jan 16 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
Jun 10 Javascript
Javascript技术栈中的四种依赖注入小结
Feb 27 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
Apr 05 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
Jun 03 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
Jul 17 Javascript
JS实现点击Radio动态更新table数据
Jul 18 Javascript
微信小程序实现团购或秒杀批量倒计时
Nov 01 Javascript
对angularJs中ng-style动态改变样式的实例讲解
Sep 30 Javascript
vue缓存之keep-alive的理解和应用详解
Nov 02 Javascript
vue实现锚点定位功能
Jun 29 Vue.js
react-navigation 如何判断用户是否登录跳转到登录页的方法
Dec 01 #Javascript
利用babel将es6语法转es5的简单示例
Dec 01 #Javascript
微信小程序实现鼠标拖动效果示例
Dec 01 #Javascript
原生JS实现ajax与ajax的跨域请求实例
Dec 01 #Javascript
浅谈angular4实际项目搭建总结
Dec 01 #Javascript
JS实现的ajax和同源策略(实例讲解)
Dec 01 #Javascript
微信小程序表单验证功能完整实例
Dec 01 #Javascript
You might like
php xfocus防注入资料
2008/04/27 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
javascript 禁止复制网页
2009/06/11 Javascript
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
基于Jquery的仿Windows Aero弹出窗(漂亮的关闭按钮)
2010/09/28 Javascript
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
angularjs指令中的compile与link函数详解
2014/12/06 Javascript
jQuery使用hide方法隐藏页面上指定元素的方法
2015/03/30 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
Bootstrap如何创建表单
2016/10/21 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
JavaScrip如果基于url实现图片下载
2020/07/03 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
python使用Tkinter显示网络图片的方法
2015/04/24 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
pyspark操作MongoDB的方法步骤
2019/01/04 Python
python中字典按键或键值排序的实现代码
2019/08/27 Python
Python-numpy实现灰度图像的分块和合并方式
2020/01/09 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
adidas澳大利亚官方网站:adidas Australia
2018/04/15 全球购物
跟单业务员岗位职责
2014/03/08 职场文书
天下第一关导游词
2015/02/06 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
企业培训简报范文
2015/07/20 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记