`

javascript实现螺旋数组

阅读更多
javascript版本,可直接粘贴到chrome控制台下运行,
二维数组方式实现最后是一行一行打印的;
支持顺时针和逆时针旋转;
不大喜欢递归,时间空间开销都大,而且还不易修改,算位置的话就纯数学了,我的数学不大好

(function(){
    var RIGHT = 0, DOWN = 1, LEFT = 2, UP = 3;//闭包常量
    //初始化参数
    positonManager = function(length,clockwise){
        this.length = length;
		this.clockwise=clockwise;
        this.cx = 0;//当前x坐标
        this.cy = 0;//当前y坐标
        this.cn = 1;//当前数值
        this.cm = clockwise?RIGHT:DOWN;//当前移动方向
        this.positions = new Array(length);//空的二维数组
        for (var i = 0; i < length; i++) {
            this.positions[i] = new Array(length);
        }
        this.positions[0][0] = ' 1';
    }
    
    positonManager.prototype = {
        moveNext: function(){
            if (this.addNewNum(this.cm)) {//继续上次方向
                return true;
            }
            else 
                if (this.addNewNum((this.cm  + (this.clockwise?1:3))%4)) {//因为是个螺旋,转向只能按照固定次序进行循环!
                    return true;
                }
            return false;//无路可走了!
        },
        //根据方向获取下一地点后判断是否已占位,未占位则赋值,已占位返回false
        addNewNum: function(m){
            var xy = this.getNewPosition(m);
            if (xy !== false && this.positions[xy[1]][xy[0]] == undefined) {
                this.cn++;
                this.positions[xy[1]][xy[0]] = this.cn < 10 ? ' ' + this.cn : '' + this.cn;
                this.cx = xy[0];
                this.cy = xy[1];
                this.cm = m;
                return true;
            }
            return false;
        },
        //根据方向获取下一地点,越界返回false
        getNewPosition: function(dir){
            switch (dir) {
                case RIGHT:
                    return (this.cx + 1 == this.length ? false : [this.cx + 1, this.cy]);
                case DOWN:
                    return (this.cy + 1 == this.length ? false : [this.cx, this.cy + 1]);
                case LEFT:
                    return (this.cx == 0 ? false : [this.cx - 1, this.cy]);
                case UP:
                    return (this.cy == 0 ? false : [this.cx, this.cy - 1]);
            }
        },
        printAll: function(){
            var i, j,line;
            while (this.moveNext()){}
            for (i=0; i < this.length; i++) {
				line='';
                for (j=0; j < this.length; j++) {
                	line+=this.positions[i][j]+' ';
                }
				console.log(line);
            }
        }
    }
})()

console.log('int i=5;');
var thread1 = new positonManager(5,false);
thread1.printAll();
console.log('int i=6;');
var thread = new positonManager(6,true);
thread.printAll();
分享到:
评论

相关推荐

    javaScript 3D 基因螺旋实例 源码

    总结来说,这个"JavaScript 3D基因螺旋实例"是一个利用WebGL和JavaScript技术实现的3D视觉项目,它涉及到了3D图形编程、DNA结构的理解、光照和材质的设定,以及WebGL库的使用。通过学习和实践这个实例,开发者不仅...

    JavaScript定义及输出螺旋矩阵的方法详解

    以下是对螺旋矩阵及其JavaScript实现的详细说明: **螺旋矩阵概念:** 螺旋矩阵是一种二维数组,其元素按特定的顺序填充。想象一个数字从矩阵的最外层开始,从左上角开始,向右填充一行,然后向下填充一列,接着向...

    javascript-leetcode面试题解递归与回溯问题之第54题螺旋矩阵-题解.zip

    螺旋矩阵是一种特殊的矩阵布局方式,数据按照顺时针方向螺旋地填充二维数组。例如,一个3x3的矩阵应该如以下方式填充: ``` [1, 2, 3] [8, 9, 4] [7, 6, 5] ``` 解题思路通常分为两个主要部分:状态转移和边界条件...

    球体螺旋运动

    为了理解并实现球体螺旋运动,我们需要掌握一些关键的编程知识和技术。 首先,我们需要了解基本的三维坐标系统。在计算机图形学中,通常使用右手坐标系,其中X轴代表水平方向,Y轴代表垂直方向,Z轴则指向观察者。...

    sunflowerspiral:向日葵螺旋,又名螺旋形的东西

    对于向日葵螺旋的实现,我们可以借助于JavaScript的二维数组和循环结构来创建出螺旋的点阵,然后通过Canvas API或者SVG等图形绘制技术将这些点阵转换成视觉上的螺旋图案。 首先,我们需要定义一个二维数组来表示...

    js代码-螺旋矩阵2,已知矩阵返回顺时针顺序的元素 思想:

    以上就是关于JavaScript实现螺旋矩阵2,返回顺时针顺序元素的核心知识点。通过这个算法,你可以轻松地处理类似问题,灵活地应用于不同的编程场景。在实践中,还可以根据具体需求优化代码,比如处理非方阵的情况,...

    p5.js实现斐波那契螺旋的示例代码

    p5.js是一个JavaScript库,旨在简化与网页结合的图形和交互式作品的编程。斐波那契数列是一系列数字,在数学中,相邻两个数字之和等于下一个数字,常见的是0, 1, 1, 2, 3, 5, 8, 13, 21等。斐波那契螺旋是一种螺旋...

    JavaScript版 数据结构与算法

    10-1 螺旋矩阵-原理讲解 10-2 螺旋矩阵-代码实操 10-3 旋转图像-原理讲解 10-4 旋转图像-代码实操第11章 数据结构之“二叉树”二叉树是数据结构中难度最大的没有之一,如何实现一个二叉树结构并对它遍历难于上青天...

    javascript中活灵活现的Array对象详解

    JavaScript中的Array对象,就是我们常说的数组对象,主要用于封装多个任意类型的数据,并对它们进行管理。 所有主流浏览器均支持Array对象。 大家都知道Array实例有这四个方法:push、pop、shift、unshift。大家也都...

    js代码-螺旋矩阵,按顺时针生成矩阵

    本文将深入探讨如何使用JavaScript来实现顺时针生成螺旋矩阵。 首先,我们需要了解螺旋矩阵的基本特征。假设我们有一个n×n的矩阵,起始位置为(0, 0),即第一行第一列。我们从这个位置开始,按顺时针方向填充数字1...

    snail:一种将二维数组的元素按顺时针螺旋形排列成新的一维数组的算法

    一种将二维数组的元素排列成顺时针遍历的新一维数组的算法。 Codewars链接 如何执行 创建任何二维数组,调用snail函数,并将其传递给二维数组。 输入 let array = [ [ 1 , 2 , 3 , 1 ] , [ 4 , 5 , 6 , 4 ] , [ 7 , ...

    信用k螺旋矩阵

    在"creditkarma-spiralmatrix"这个练习中,开发者可能需要实现一个函数,该函数接收一个n x n的矩阵作为输入,并返回一个新的数组,其中包含按照螺旋顺序排列的矩阵元素。这个过程通常包括四个步骤:初始化四个边界...

    粒子螺旋线条Canvas特效

    "jiaoben7330"可能是JavaScript源码文件,包含了实现粒子螺旋线条动画的核心逻辑。这个文件中可能包含了定义粒子对象、初始化粒子数组、计算粒子运动轨迹、更新粒子状态和重绘Canvas等关键函数。 为了深入理解并...

    JavaScript-Algorithms:JavaScript算法

    JavaScript算法 JavaScript算法 内容 -&gt;不使用内置数组方法的字符串反转 -&gt;回文检查 -&gt;查找数组中的最大连续1 -&gt;查找字符串中的最大重复字符 ...-&gt;输入矩阵螺旋 -&gt;斐波那契 -&gt;记忆 -&gt;排队编织 -&gt;与堆栈队列

    spiral-rectangle

    在JavaScript编程中,实现螺旋矩形通常涉及到数组操作和循环控制。这个名为"spiral-rectangle"的项目很可能是用于创建并打印或显示这种螺旋矩形的代码库。 首先,我们需要理解螺旋矩形的基本概念。假设我们有一个n...

    fibonacci-spiral:旋转圈

    在“fibonacci-spiral:旋转圈”项目中,开发者可能使用了JavaScript的数组和循环结构来生成斐波那契序列,然后通过计算每个数字在螺旋中的位置来绘制图形。JavaScript的`for`循环或者`while`循环可以用来迭代...

    java贪吃蛇源码-Interview-Stuff:面试问题、答案、Java、Python、数据库、Web、Javascript

    捕集雨水勾股三重巧克力分布问题股票买卖左侧较小右侧较大的元素将数组转换为Zig-Zag方式查找已排序数组中出现一次的元素流中第K大的元素相对排序螺旋遍历矩阵的元素排序由频率最大数组成的数组 由 0 和 1 组成的...

    java笔试面试题汇总 基础版 最新 最全

    - **ArrayList**:基于数组实现的列表,适用于随机访问元素的场景。 - **Vector**:与`ArrayList`类似,但`Vector`是线程安全的,适用于多线程环境。 - **LinkedList**:基于双向链表实现,插入和删除操作比基于...

Global site tag (gtag.js) - Google Analytics