亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript實現的一個計算數字步數的算法分享

2019-11-20 13:48:24
字體:
來源:轉載
供稿:網友

這兩天看了下某位大神的github,知道他對算法比較感興趣,看了其中的一個計算數字的步數算法,感覺這個有點意思,所以就自己實現了一個。

算法描述與實現原理

給出一個整型數字,統計出有多少種走法可以到達目標,比如一個數字4,可以有下面幾種走法

復制代碼 代碼如下:

    [ 1, 3 ]
        [ 4 ]
    [ 1, 1, 2 ]
        [ 2, 2 ]
    [ 1, 1, 1, 1 ]

其實通過上面的組合可以得出下面的結論。

1.先列出所有項是1的組合
2.依次從左到右項為1的組合
3.遞歸上面的集合,找出項里1的索引,然后計算左起2項的值,結果遞歸此操作
4.排除1和2的情況

下面先提供三個工具函數:

復制代碼 代碼如下:

// 計算數組內的值
function calculate(arg){
    return eval(arg.join('+'));
}

// 輸出數組的值
function print(arg){
    for(var i = 0; i < arg.length; i++){
        console.log(arg[i]);
    }
}

// 檢查是否是正反的走法
function hasRepeat(src, dist){
    if (dist.length != 2) return false;
    for(var i = 0, len = src.length; i < len ; i++){
        if(dist.length == src[i].length){
            if(dist[0] == src[i][1]){
                return true;
            }
        }
    }
    return false;
}

下面貼出算法的實現:

復制代碼 代碼如下:

function countSteps(n){
    var counts = 0,i,j = 0;
    var result = [];
    var newresult = [];
    var source = [];
    var temparg = [];
    // 生成項全為1的數組
    for(i = 1; i <= n ; i++){
        source.push(1);
    }
    if(n > 2){
        for(j = 1; j < n - 1; j++){
            temparg.length = 0;
            if(j < n - 1){
                // 生成從左到右項為1遞增的數組
                // 1.. 11.. 111..
                Array.prototype.push.apply(temparg, source.slice(0, j));
                temparg.push(calculate(source.slice(j,n)));
                result.push(temparg.slice(0));
                // 遞歸數組里的內容,直到項里沒有1為止
                combine(temparg.slice(0));
            }
        }
    }
    // 組合包含1的數組項
    // 111->21->3
    function combine(arg){
        var linearg = [];
        for(var i = 0; i < arg.length; i++){
            if(arg[i] == 1){
                if(i ==0 || i == 1){
                    linearg.push(calculate(arg.slice(0,2)));
                    Array.prototype.push.apply(linearg, arg.slice(2, arg.length));
                    if(!hasRepeat(result, linearg)){
                        result.push(linearg);
                        combine(linearg.slice(0));
                    }
                    return;
                }
            }
        }
    }
    //為2的時候比1要多一項
    if(n == 2){
        result.push([2]);
    }
    // 添加全為1的情況
    result.push(source);
    // 輸出所有步
    print(result);
    console.log('總共有:' + result.length + '種走法');
}

// 運行
countSteps(4);

// 輸出下面內容
/*
    [ 1, 3 ]
    [ 4 ]
    [ 1, 1, 2 ]
    [ 2, 2 ]
    [ 1, 1, 1, 1 ]
    總共有:5種走
*/

總結

這個算法其實可以應用到某類游戲中去,當兩個物體之前的距離一定的話,對所有的可能進行業務處理,當然也可以應用到別的地方,雖然大部分前端工程師對算法的實踐比較少,不過它還是有存在的價值的,很多UI細節方面其實都運用了算法,以后有空還會貼更多關于算法相關的文章,歡迎大家多提些寶貴意見.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91av在线播放视频| 91超碰中文字幕久久精品| 日韩电影中文字幕av| 国产日韩精品在线播放| 在线观看日韩视频| 性欧美在线看片a免费观看| 欧美有码在线观看| 成人xvideos免费视频| 欧美韩日一区二区| 国产精品一久久香蕉国产线看观看| 国产视频精品在线| 久久国产精品久久久久| 欧美性一区二区三区| 亚洲第一区第二区| 日韩av电影手机在线观看| 国产激情综合五月久久| 国产精品久久久久999| 国产精品美女呻吟| 亚洲午夜激情免费视频| 色综合伊人色综合网| 国产精品欧美激情| 亚洲女人初尝黑人巨大| 亚洲综合在线中文字幕| 国产亚洲精品久久久优势| 国产一区二区日韩精品欧美精品| 成人有码视频在线播放| 中文日韩在线观看| 国产精品美女免费| 夜夜嗨av色综合久久久综合网| 不卡av在线播放| 国产精品福利在线观看| 日韩免费观看视频| 久久久久久久激情视频| 色综合久久88色综合天天看泰| 青青在线视频一区二区三区| 国语自产偷拍精品视频偷| 亚洲免费av网址| 久久影视电视剧凤归四时歌| 亚洲一区二区中文| 中文字幕精品一区久久久久| 欧美性xxxxxxx| 日韩欧美国产视频| 亚洲国产精品推荐| 久久综合色影院| 神马久久久久久| 亚洲新声在线观看| 亚洲精品98久久久久久中文字幕| 亚洲最新中文字幕| 国外色69视频在线观看| 亚洲人av在线影院| 一本一本久久a久久精品牛牛影视| 亚洲精品电影网在线观看| 精品久久久久久久久国产字幕| 国产精品99蜜臀久久不卡二区| 国产精品自在线| 国产日韩欧美在线视频观看| 欧美电影免费观看高清完整| 欧美另类69精品久久久久9999| 久久6免费高清热精品| 深夜福利一区二区| 亚洲国产女人aaa毛片在线| 日韩日本欧美亚洲| 亚洲国产精品专区久久| 青青a在线精品免费观看| 欧美日韩国产一区在线| 欧美成人免费全部观看天天性色| 国产成人精品一区| 国产91精品在线播放| 中文字幕一区日韩电影| 亚洲精品aⅴ中文字幕乱码| 久久久999精品免费| 亚洲成人网在线观看| 深夜精品寂寞黄网站在线观看| 精品久久久久久久久久| 91久久久久久久久久| 中文字幕成人精品久久不卡| 亚洲人成人99网站| 亚州欧美日韩中文视频| 精品夜色国产国偷在线| 欧美电影免费播放| 91亚洲国产成人精品性色| 亚洲精品国产精品自产a区红杏吧| 国产日韩av在线| 久久99精品久久久久久琪琪| 国内精品视频久久| 欧美性生交大片免费| 欧美福利视频网站| 这里只有精品久久| 精品人伦一区二区三区蜜桃免费| 亚洲第一偷拍网| 国产精品久久久久久久久| 亚洲女性裸体视频| 91系列在线播放| 日韩专区在线播放| 按摩亚洲人久久| 国产在线精品播放| 亚洲天堂男人天堂| 欧美日韩亚洲高清| 狠狠爱在线视频一区| 成年人精品视频| 精品日韩美女的视频高清| 国产精品久久婷婷六月丁香| 精品一区二区亚洲| 欧美一级在线亚洲天堂| 成人免费网站在线观看| 92版电视剧仙鹤神针在线观看| 亚洲图片在区色| 国产精品视频地址| 91久久精品国产91久久| 午夜精品久久久久久久久久久久久| 97精品视频在线| 久久免费福利视频| 午夜免费在线观看精品视频| 国产成人精品999| 久久久免费观看| 欧美贵妇videos办公室| 亚洲国产成人精品久久| 乱亲女秽乱长久久久| 狠狠久久亚洲欧美专区| 国产女同一区二区| 午夜精品久久久久久久男人的天堂| 欧美疯狂做受xxxx高潮| 国产精品视频久久久久| 国产亚洲精品久久久久久777| 日韩一区二区三区xxxx| 久久久久久中文字幕| 一个色综合导航| 国产一区二区三区在线免费观看| 亚洲午夜久久久影院| 欧美性jizz18性欧美| 欧美日韩视频免费播放| 欧美另类极品videosbestfree| 国产一区视频在线| 国产精品r级在线| 日本精品va在线观看| 亲爱的老师9免费观看全集电视剧| 亚洲欧美日韩一区在线| 国产精品福利无圣光在线一区| 亚洲精品电影在线| 久久亚洲精品小早川怜子66| 日韩av在线免费观看| 亚洲精品短视频| 粗暴蹂躏中文一区二区三区| 亚洲欧美日韩高清| 欧美黑人一级爽快片淫片高清| 亚洲精品中文字幕有码专区| 亚洲国产精久久久久久| 亚洲iv一区二区三区| 国产精品直播网红| 欧美午夜宅男影院在线观看| 91精品国产91久久久久久久久| 一区二区在线视频| 国产成人91久久精品| 日韩中文av在线| 亚洲精品小视频在线观看| 一本一本久久a久久精品综合小说| 国产成人中文字幕| 国产精品h在线观看| 欧美在线观看网站| 欧美成人性生活| 国产成人福利视频| 在线色欧美三级视频| 欧美中文在线字幕| 成人精品网站在线观看|