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 相关文章推荐
JQuery 返回布尔值Is()条件判断方法代码
May 14 Javascript
解决遍历时Array.indexOf产生的性能问题
Jul 03 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
Jan 14 Javascript
jQuery验证插件validate使用详解
May 11 Javascript
Bootstrap的Refresh Icon也spin起来
Jul 13 Javascript
jQuery UI插件实现百度提词器效果
Nov 21 Javascript
详解react使用react-bootstrap当轮子造车
Aug 15 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
Jan 03 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
基于js实现抽红包并分配代码实例
Sep 19 Javascript
在Vue中使用antv的示例代码
Jun 29 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新手上路(十四)
2006/10/09 PHP
使用openssl实现rsa非对称加密算法示例
2014/01/24 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
zen cart实现订单中增加paypal中预留电话的方法
2016/07/12 PHP
postman的安装与使用方法(模拟Get和Post请求)
2018/08/06 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
js 字符串操作函数
2009/07/25 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
Javascript原型链和原型的一个误区
2014/10/22 Javascript
JavaScript判断前缀、后缀是否是空格的方法
2015/04/15 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
python中偏函数partial用法实例分析
2015/07/08 Python
python实现梯度下降算法
2020/03/24 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
Clarks鞋法国官方网站:英国其乐鞋品牌
2018/02/11 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
Opodo意大利:欧洲市场上领先的在线旅行社
2019/10/24 全球购物
八年级英语教学反思
2014/01/09 职场文书
20年同学聚会感言
2014/02/03 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
领导干部个人对照检查材料(群众路线)
2014/09/26 职场文书
出生证明格式
2015/06/15 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
2015年教师节感言
2015/08/03 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
python异常中else的实例用法
2021/06/15 Python