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,搞定!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM