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 相关文章推荐
Json对象与Json字符串互转(4种转换方式)
Mar 27 Javascript
javascript 获取模态窗口的滚动位置代码
Aug 06 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
浅谈被jQuery抛弃的函数及替代函数
May 03 Javascript
js动态创建及移除div的方法
Jun 03 Javascript
JavaScript html5利用FileReader实现上传功能
Mar 27 Javascript
js弹出窗口简单实现代码
Mar 22 Javascript
JS手机端touch事件计算滑动距离的方法示例
Oct 26 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
Mar 04 Javascript
详解vue2.6插槽更新v-slot用法总结
Mar 09 Javascript
解决vue-cli项目开发运行时内存暴涨卡死电脑问题
Oct 29 Javascript
ant-design-vue 实现表格内部字段验证功能
Dec 16 Javascript
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常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
php魔术方法与魔术变量、内置方法与内置变量的深入分析
2013/06/03 PHP
PHP运行环境配置与开发环境的配置(图文教程)
2013/06/04 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
php对称加密算法示例
2014/05/07 PHP
php中的字符编码转换函数用法示例
2014/10/20 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
Symfony2安装第三方Bundles实例详解
2016/02/04 PHP
php进程间通讯实例分析
2016/07/11 PHP
javascript下数值型比较难点说明
2010/06/07 Javascript
js 模拟气泡屏保效果代码
2010/07/10 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
纯JS实现轮播图
2017/02/22 Javascript
js实现一键复制功能
2017/03/16 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
Python交互环境下实现输入代码
2018/06/22 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
Python如何将字符串转换为日期
2020/07/31 Python
Python面向对象特殊属性及方法解析
2020/09/16 Python
欧舒丹加拿大官网:L’Occitane加拿大
2017/10/29 全球购物
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
毕业生自荐信的主要内容
2013/10/29 职场文书
大三毕业自我鉴定
2014/01/15 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
导游词400字
2015/02/13 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python