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 相关文章推荐
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
Jun 14 Javascript
一个JQuery写的点击上下滚动的小例子
Aug 27 Javascript
jquery 插件学习(四)
Aug 06 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
Apr 02 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
Mar 12 Javascript
用javascript读取xml文件读取节点数据
Aug 12 Javascript
JavaScript组件开发完整示例
Dec 15 Javascript
js弹出框、对话框、提示框、弹窗实现方法总结(推荐)
May 31 Javascript
jQuery实现的简单拖拽功能示例
Sep 13 Javascript
javascript 中的继承实例详解
May 05 Javascript
ionic 自定义弹框效果
Jun 27 Javascript
vue中对象数组去重的实现
Feb 06 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
ajax实现无刷新分页(php)
2010/07/18 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
php跨站攻击实例分析
2014/10/28 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
浅谈PHP中的数据传输CURL
2016/09/06 PHP
PHP仿微信多图片预览上传实例代码
2016/09/13 PHP
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
详解nodejs异步I/O和事件循环
2017/06/07 NodeJs
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
JavaScript指定断点操作实例教程
2018/09/18 Javascript
微信小程序从注册账号到上架(图文详解)
2019/07/17 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
Python中isnumeric()方法的使用简介
2015/05/19 Python
使用Python编写爬虫的基本模块及框架使用指南
2016/01/20 Python
python迭代器与生成器详解
2016/03/10 Python
Python实现计算两个时间之间相差天数的方法
2017/05/10 Python
对Python中内置异常层次结构详解
2018/10/18 Python
Django中的forms组件实例详解
2018/11/08 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
关于人生的感言
2014/01/17 职场文书
电子商务专业求职信
2014/03/08 职场文书
MySQL 数据丢失排查案例
2021/05/08 MySQL
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL