zoukankan      html  css  js  c++  java
  • js实现蛇形矩阵

    参加腾讯前端实习生笔试,真的是被虐了千百遍,除了一条js程序题,其他半点前端都没有,都是考算法,计算机原理,数据结构。下面贴上腾讯笔试最后三大条中的一条,实现一个蛇形矩阵的输出。蛇形矩阵的什么样这里我就不多说了。

    var lineCount=0;
        var numCount=1;
        var lineLog=1;
        var doubleArray=[];
        var result="result:";
        var lineCountGet;
        function index (n) {
            ArrayMake(n);
            lineCountGet=n;
            draw(lineCount);
        }
        function ArrayMake(log){
            if(log>0){
                --log;
                doubleArray[log]=new Array();
                ArrayMake(log)
            }
        }
        function draw(lineNum){
            if(lineNum>lineCountGet){
                console.log(result);
            }else{
                for(i=0;i<=lineNum;i++){
                    console.log(doubleArray);
                    if(lineLog==1){
                        doubleArray[lineNum-i][i]=numCount;
                        result+=doubleArray[lineNum-i][i];
                    }else{
                        doubleArray[i][lineNum-i]=numCount;
                        result+=doubleArray[i][lineNum-i];
                    }
                    ++numCount;
                }
                lineLog=-lineLog;
                ++lineCount;
                draw(lineCount);
            }
        }
        index(5);

    整理下思路,首先看到蛇形矩阵,第一想法就是做成一个二维矩阵,然后通过遍历输出。这里博主没有输出,只是console了一下

    首先看变量定义

    var lineCount=0;
        var numCount=1;//当前排到的数字
        var lineLog=1;//矩阵排列顺序有两种,这里将自左下至右上设为负
        var doubleArray=[];//初始化一个数组
        var result="result:";
        var lineCountGet;//需要输出几列
        function index (n) {
            ArrayMake(n);
            lineCountGet=n;
            draw(lineCount);
        }

    因为数字插入是按照1,2,3,4.....这样的,所以初始化一下,之后通过自加实现递增。linelog的设定是因为我们每个斜行顺序有正向有反向

    之后我们遇到第一个问题,js中不可以直接命名多维数组,所以我们只好自己造一个通过function ArrayMake

        function ArrayMake(log){
            if(log>0){
                --log;
                doubleArray[log]=new Array();
                ArrayMake(log)
            }
        }

    用一步递归,对array中每个数组再次array化

    数组造好了,下面我们要做的就是插数字了

        function draw(lineNum){
            if(lineNum>lineCountGet){
                console.log(result);
            }else{
                for(i=0;i<=lineNum;i++){
                    console.log(doubleArray);
                    if(lineLog==1){
                        doubleArray[lineNum-i][i]=numCount;
                        result+=doubleArray[lineNum-i][i];
                    }else{
                        doubleArray[i][lineNum-i]=numCount;
                        result+=doubleArray[i][lineNum-i];
                    }
                    ++numCount;
                }
                lineLog=-lineLog;
                ++lineCount;
                draw(lineCount);
            }
        }

    linenum这边是用来告知当前是第几斜行,因为第几斜行就有几个数,这样便于for循环的书写,再通过linelog辨别斜行顺序的正反区分应该加入数组的样式。ok,搞定!

  • 相关阅读:
    Jenkins+postman+Newman之API自动化测试
    python之路——迭代器和生成器
    文件操作
    函数
    python基础数据类型二
    dp的一种理解角度及[NOI2020]命运 题解
    从零开始“发明”Treap
    博客停更
    [转]Linux下C语言-RPC远程调用编程rpcgen用法
    一位编程小白的自述 —— 从小学到现在
  • 原文地址:https://www.cnblogs.com/natureless/p/5452178.html
Copyright © 2011-2022 走看看