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查找字符串中出现最多的字符和次数的小例子
Oct 29 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
Nov 14 Javascript
javascript精确统计网站访问量实例代码
Dec 19 Javascript
javascript返回顶部的按钮实现方法
Jan 09 Javascript
JavaScript数组的定义及数字操作技巧
Jun 06 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
Jun 17 Javascript
基于js中的原型、继承的一些想法
Aug 10 Javascript
手机端转换rem适应
Apr 01 Javascript
详解微信小程序审核不通过的解决方法
Jan 17 Javascript
深入理解javascript prototype的相关知识
Sep 19 Javascript
原生JS与CSS实现软件卸载对话框功能
Dec 05 Javascript
js实现车辆管理系统
Aug 26 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静态新闻列表自动生成代码
2007/06/14 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
PHP扩展安装方法步骤解析
2020/11/24 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
python爬虫_微信公众号推送信息爬取的实例
2017/10/23 Python
python 字符串和整数的转换方法
2018/06/25 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
python实现dijkstra最短路由算法
2019/01/17 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
Python json模块与jsonpath模块区别详解
2020/03/05 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
HTML5触摸事件实现移动端简易进度条的实现方法
2018/05/04 HTML / CSS
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
数控机械专业个人的自我评价
2014/01/02 职场文书
前台文员个人求职信范文
2014/01/05 职场文书
营销总经理岗位职责
2014/02/02 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书
用php如何解决大文件分片上传问题
2021/07/07 PHP
Github 使用python对copilot做些简单使用测试
2022/04/14 Python