成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js實(shí)現(xiàn)螺旋矩陣算法

oogh / 2046人閱讀

摘要:用填充一個(gè)的矩陣,該矩陣按順時(shí)針旋轉(zhuǎn)方向依次增大,用編程輸出這個(gè)數(shù)組。要求如下我的思路先生成一個(gè)一維的數(shù)組這里實(shí)現(xiàn)的算法是通過略微修改了然后通過算法實(shí)現(xiàn)變化對(duì)應(yīng)賦值方式有點(diǎn)蠢,通過實(shí)現(xiàn)還有有所收獲的完整

Q:用0-9填充一個(gè)N*N的矩陣,該矩陣按順時(shí)針旋轉(zhuǎn)方向依次增大,用js編程輸出這個(gè)數(shù)組。要求如下:

我的思路先生成一個(gè)一維的數(shù)組;

這里實(shí)現(xiàn)的算法是通過略微修改了d3.range();

function range_(start, stop, step) {
        if (arguments.length < 3) {
            step = 1;
            if (arguments.length < 2) {
                stop = start;
                start = 0;
            }
        }
        if ((stop - start) / step === Infinity) throw new Error("infinite range");
        var range = [],
            k = range_integerScale(Math.abs(step)),
            i = -1,
            j;
        start *= k, stop *= k, step *= k;
        if (step < 0)
            while ((j = start + step * ++i) > stop) range.push(range_interger_10(j / k));
        else
            while ((j = start + step * ++i) < stop) range.push(range_interger_10(j / k));
        return range;
    };

    function range_integerScale(x) {
        var k = 1;
        while (x * k % 1) k *= 10;
        return k;
    }

    function range_interger_10(a) {
        a = a >= 10 ? range_interger_10(a % 10) : a;
        return a;
    }

然后通過算法實(shí)現(xiàn)index變化;對(duì)應(yīng)賦值;方式有點(diǎn)蠢,通過實(shí)現(xiàn)還有有所收獲的;

var c = {
        "index": 1,
        "fuhao": -1
    }
    var r = {
        "index": 1,
        "fuhao": -1
    }
    var step = n - 1;
    var jo = 0;
    var i = 1;
    var _ = 0;
    var direction = {
        0: function() {
            c["fuhao"] = -Math.abs(c["fuhao"])
            return c
        },
        1: function() {
            r["fuhao"] = -Math.abs(r["fuhao"])
            return r
        },
        2: function() {
            c["fuhao"] = Math.abs(c["fuhao"])
            return c
        },
        3: function() {
            r["fuhao"] = Math.abs(r["fuhao"])
            return r
        }
    }
    var cishu = 0;
    while (i <= cell.length) {

        arr[r["index"] - 1][c["index"] - 1] = cell[i - 1];

        var step_num = Math.floor((i - 1) / ((n - 1) * 3)) == 0 ? 3 : 2;

        if (i - jo <= step) {

            var s = direction[_ % 4]();

            
            s["index"] = s["index"] - s["fuhao"]

            if (i - jo == step) {

                _++;

                jo = i;

                cishu++;

                if (cishu == step_num) {

                    step--;
                    cishu = 0
                }
            }
        }

        i++
    }

完整code

function circleNum(n) {
    var arr = new Array(n);
    for (var i = 0; i < arr.length; i++) {
        arr[i] = new Array(n);
    };
    //
    var length = n * n;
    var cell = range_(length)
    console.log(cell)
    var c = {
        "index": 1,
        "fuhao": -1
    }
    var r = {
        "index": 1,
        "fuhao": -1
    }
    var step = n - 1;
    var jo = 0;
    var i = 1;
    var _ = 0;
    var direction = {
        0: function() {
            c["fuhao"] = -Math.abs(c["fuhao"])
            return c
        },
        1: function() {
            r["fuhao"] = -Math.abs(r["fuhao"])
            return r
        },
        2: function() {
            c["fuhao"] = Math.abs(c["fuhao"])
            return c
        },
        3: function() {
            r["fuhao"] = Math.abs(r["fuhao"])
            return r
        }
    }

    var cishu = 0;

    while (i <= cell.length) {

        arr[r["index"] - 1][c["index"] - 1] = cell[i - 1];

        var step_num = Math.floor((i - 1) / ((n - 1) * 3)) == 0 ? 3 : 2;

        if (i - jo <= step) {

            var s = direction[_ % 4]();

            
            s["index"] = s["index"] - s["fuhao"]

            if (i - jo == step) {

                _++;

                jo = i;

                cishu++;

                if (cishu == step_num) {

                    step--;
                    cishu = 0
                }
            }
        }

        i++
    }

    function range_(start, stop, step) {
        if (arguments.length < 3) {
            step = 1;
            if (arguments.length < 2) {
                stop = start;
                start = 0;
            }
        }
        if ((stop - start) / step === Infinity) throw new Error("infinite range");
        var range = [],
            k = range_integerScale(Math.abs(step)),
            i = -1,
            j;
        start *= k, stop *= k, step *= k;
        if (step < 0)
            while ((j = start + step * ++i) > stop) range.push(range_interger_10(j / k));
        else
            while ((j = start + step * ++i) < stop) range.push(range_interger_10(j / k));
        return range;
    };

    function range_integerScale(x) {
        var k = 1;
        while (x * k % 1) k *= 10;
        return k;
    }

    function range_interger_10(a) {
        a = a >= 10 ? range_interger_10(a % 10) : a;
        return a;
    }
    for (var ii = 0; ii < n; ii++) {
        console.log(arr[ii])
    }
    return arr;
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87074.html

相關(guān)文章

  • js實(shí)現(xiàn)螺旋矩陣算法

    摘要:用填充一個(gè)的矩陣,該矩陣按順時(shí)針旋轉(zhuǎn)方向依次增大,用編程輸出這個(gè)數(shù)組。個(gè)人覺得這個(gè)思路不是最優(yōu)解,各位路過的高手如果有更好思路,望不吝賜教。請(qǐng)輸入代碼此處可給賦值即可,比如生成矩陣,就等于 Q:用0-9填充一個(gè)N*N的矩陣,該矩陣按順時(shí)針旋轉(zhuǎn)方向依次增大,用js編程輸出這個(gè)數(shù)組。要求如下:showImg(https://segmentfault.com/img/bVJ5Uf?w=210...

    bbbbbb 評(píng)論0 收藏0
  • Leetcode 54:Spiral Matrix 螺旋矩陣

    摘要:螺旋矩陣給定一個(gè)包含個(gè)元素的矩陣行列,請(qǐng)按照順時(shí)針螺旋順序,返回矩陣中的所有元素。每次轉(zhuǎn)向或都會(huì)自減。循環(huán)可操作性很高,可以直接操作索引坐標(biāo)改變遍歷方式,不再贅述。 54:Spiral Matrix 螺旋矩陣 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix i...

    venmos 評(píng)論0 收藏0
  • Leetcode 54:Spiral Matrix 螺旋矩陣

    摘要:螺旋矩陣給定一個(gè)包含個(gè)元素的矩陣行列,請(qǐng)按照順時(shí)針螺旋順序,返回矩陣中的所有元素。每次轉(zhuǎn)向或都會(huì)自減。循環(huán)可操作性很高,可以直接操作索引坐標(biāo)改變遍歷方式,不再贅述。 54:Spiral Matrix 螺旋矩陣 Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix i...

    mochixuan 評(píng)論0 收藏0
  • 6-9月技術(shù)文章匯總

    摘要:分布式的管理和當(dāng)我在談?wù)摷軜?gòu)時(shí)我在談啥狀態(tài)碼詳解無狀態(tài)協(xié)議和請(qǐng)求支持哪些方法分層協(xié)議棧有哪些數(shù)據(jù)結(jié)構(gòu)運(yùn)用場景說說你常用的命令為什么要有包裝類面向?qū)ο蟮奶卣魇巧妒巧队惺裁春锰幭到y(tǒng)設(shè)計(jì)工程在線診斷系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)索引背后的數(shù)據(jù)結(jié)構(gòu)及算法原理軟技能 HTTP 【HTTP】分布式session的管理 【HTTP】Cookie和Session 【HTTP】當(dāng)我在談?wù)揜estFul架構(gòu)時(shí)我在談啥?...

    miya 評(píng)論0 收藏0
  • [Leetcode] Spiral Matrix 螺旋矩陣

    摘要:代碼添加該圈第一行添加最后一列添加最后一行添加第一列如果是奇數(shù),加上中間那個(gè)點(diǎn)后續(xù)如果在中,給出的是和來代表行數(shù)和列數(shù),該如何解決和的本質(zhì)區(qū)別就是一個(gè)是任意長方形,一個(gè)是正方形,所以中不需要判斷最后一行或者最后一列。 Spiral Matrix I Given a matrix of m x n elements (m rows, n columns), return all ele...

    waruqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<