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 相关文章推荐
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 03 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
Nov 07 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
Jul 17 Javascript
手机图片预览插件photoswipe.js使用总结
Aug 25 Javascript
javascript中异常处理案例(推荐)
Oct 03 Javascript
微信小程序实战之自定义抽屉菜单(7)
Apr 18 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
May 17 Javascript
Three.js基础学习教程
Nov 16 Javascript
浅谈redux以及react-redux简单实现
Aug 28 Javascript
Layui弹出层 加载 做编辑页面的方法
Sep 16 Javascript
Element Card 卡片的具体使用
Jul 26 Javascript
实现AJAX异步调用和局部刷新的基本步骤
Mar 17 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
分享自定义的几个PHP功能函数
2015/04/15 PHP
php抽象类用法实例分析
2015/07/07 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
javascript 静态对象和构造函数的使用和公私问题
2010/03/02 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
遮罩层点击按钮弹出并且具有拖动和关闭效果(两种方法)
2015/08/20 Javascript
使用javascript插入样式
2016/03/14 Javascript
浅谈JavaScript 中有关时间对象的方法
2016/08/15 Javascript
web前端页面生成exe可执行文件的方法
2018/02/08 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
javascript canvas封装动态时钟
2020/09/30 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
Django上线部署之IIS的配置方法
2019/08/22 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
工程管理专业个人求职信范文
2013/12/07 职场文书
实习生个人的自我评价
2013/12/08 职场文书
反四风对照检查材料
2014/09/22 职场文书
医院见习报告范文
2014/11/03 职场文书
2014年教务工作总结
2014/12/03 职场文书
教师创先争优承诺书
2015/04/27 职场文书
企业承诺书格式范文
2015/04/28 职场文书
个人工作决心书
2015/09/22 职场文书
2016高考寄语集锦
2015/12/04 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL