国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JAVASCRIPT算法(2)

AnthonyHan / 2583人閱讀

摘要:前面兩個數組已經完成了排列組合,結果在中,所以替換掉。偶然看到一個求字符串內字符全排列的算法比如給定一個字符串得出的結果是該方法是通過遞歸完成的。加上這一行,起到無重復字母的效果在網上看了很多算法,學習了很多。

幾個數組元素的排列組合問題。比如["A","B"],["C","D","E"],["F","G"],其排列組合的結果是["A","C","F"],["A","C","G"],["A","D","F"],......,["B","E","F"],["B","E","G"],共有2x3x2=12種結果,那么,如何用程序實現。

簡單的思路就是先把前面兩個數組的元素做排列組合,產生的新數組再和后面的數組做排列組合,始終是在做兩個數組的排列組合操作。

function sku(arr){
    if(arr.length<1) return null;
    if(arr.length<2) return arr[0];
    var result=[];
    var firstArr=arr[0];
    for(var i = 0 ; i < firstArr.length ; i ++){ //這里是將第一個數組里面的元素變成數組,方便后續進行concat操作。
        result.push([firstArr[i]]);
    }
    arr.splice(0,1,result);
    while(arr.length>1){
        var targetArr=arr[0];   
        var nextArr=arr[1];
        var result=[];
        for(var i = 0 ; i < targetArr.length; i ++){//進行排列組合
            for(var j = 0 ; j < nextArr.length; j ++){
               var tmp=([].concat(targetArr[i]));  //將數據復制到新的數組里面,因為后續targetArr[i]還會被用到。不能直接更改targetArr[i]這個數組。
               tmp.push(nextArr[j]);//
               result.push(tmp);
            }
        }
        arr.splice(0,2,result);//前面兩個數組已經完成了排列組合,結果在result中,所以替換掉。
    }
 }

以arr=[["A","B"],["C","D","E"],["F","G"]]作為輸入。

 for(var i = 0 ; i < firstArr.length ; i ++){ //這里是將第一個數組里面的元素變成數組,方便后續進行concat操作。
        result.push([firstArr[i]]);
    }

arr的結果就變成了[[["A"],["B"]],["C","D","E"],["F","G"]].
然后經過第一次循環,將[["A"],["B"]],["C","D","E"]兩個數組合并,
變成了result這個數組的內容是[["A","C"],["A","D"],["A","E"],["B","C"],["B","D"],["B","E"]].

arr.splice(0,2,result);

將合并后的數組去除,然后將合并的結果放到原數組列表里面,數組長度-1,當原數組只有一個元素時,就是最終結果。

偶然看到一個求字符串內字符全排列的算法

比如給定一個字符串"abc",得出的結果是abc,acb,bac,bca,cab,cba.
該方法是通過遞歸完成的。

var result = [];
function permutations(str){
    var arr= str.split("");
    helper(arr,0,[]);
    return result;
}
function helper(arr,index,list){
    if(index === arr.length){
        result.push(list.join(""));
        return;
    }
    for(var i = 0;i

大意是指每次從原數組里面選擇一個目標數組里面沒有的字符串,直到目標數組長度和原數組一樣,然后做一個join就得出了結果。

然后我發現我上面的方法也能達成這個目的,只不過要構建字符串長度這么多的數組。
每個數組的內容都一樣,就是字符串split("")以后的結果。
然后為了保證不重復,可以把for循環中加一句。

     for(var i = 0 ; i < targetArr.length; i ++){
            for(var j = 0 ; j < nextArr.length; j ++){
               var tmp=([].concat(targetArr[i]));  
               if(tmp.indexOf(nextArr[j])!=-1) continue;  //加上這一行,起到無重復字母的效果
               tmp.push(nextArr[j]);
               result.push(tmp);
            }
        }

在網上看了很多算法,學習了很多。有對的,也有錯的;有的簡單有效,有的瘋狂繞圈。有時候覺得高深莫測,看懂了以后發現完全沒必要。還是自己試試。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90098.html

相關文章

  • 優秀程序員都應該學習的 GitHub 上開源的數據結構與算法項目

    摘要:強烈推薦上值得前端學習的數據結構與算法項目,包含圖的演示過程與視頻講解。該倉庫包含了多種基于的算法與數據結構,提供進一步閱讀的解釋和鏈接。數據結構和算法必知必會的個代碼實現。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法為王。想學好前端,先練好內功,內功不行,就算招式練的再花哨,終究成不了高手;只有內功深厚者,前端之路才會走得...

    cheukyin 評論0 收藏0
  • JavaScript算法 ,Python算法,Go算法,java算法,系列之歸并排序

    摘要:常見的內部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數排序等。用一張圖概括歸并排序英語,或,是創建在歸并操作上的一種有效的排序算法,效率為。 常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。用一張圖概括: showImg(https://segmentfault.com/img/bVNwuO?w=966&h=...

    zhou_you 評論0 收藏0
  • JavaScript算法 ,Python算法,Go算法,java算法,系列之歸并排序

    摘要:常見的內部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數排序等。用一張圖概括歸并排序英語,或,是創建在歸并操作上的一種有效的排序算法,效率為。 常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。用一張圖概括: showImg(https://segmentfault.com/img/bVNwuO?w=966&h=...

    caoym 評論0 收藏0
  • JavaScript算法 ,Python算法,Go算法,java算法,系列之歸并排序

    摘要:常見的內部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數排序等。用一張圖概括歸并排序英語,或,是創建在歸并操作上的一種有效的排序算法,效率為。 常見的內部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等。用一張圖概括: showImg(https://segmentfault.com/img/bVNwuO?w=966&h=...

    microcosm1994 評論0 收藏0
  • 深入淺出 JavaScript 的 Array.prototype.sort 排序算法

    摘要:快速排序是不穩定的排序算法。瀏覽器的實現不同有什么影響排序算法不穩定有什么影響舉個例子某市的機動車牌照拍賣系統,最終中標的規則為按價格進行倒排序相同價格則按照競標順位即價格提交時間進行正排序。 本文要解決的問題 1、找出 Array.prototype.sort 使用的什么排序算法 2、用一種直觀的方式展示 Array.prototype.sort 的時間復雜度,看看它有多快? 3、...

    itvincent 評論0 收藏0
  • JavaScript深入淺出第3課:什么是垃圾回收算法

    摘要:摘要是如何回收內存的深入淺出系列深入淺出第課箭頭函數中的究竟是什么鬼深入淺出第課函數是一等公民是什么意思呢深入淺出第課什么是垃圾回收算法最近垃圾回收這個話題非常火,大家不能隨隨便便的扔垃圾了,還得先分類,這樣方便對垃圾進行回收再利用。 摘要: JS是如何回收內存的? 《JavaScript深入淺出》系列: JavaScript深入淺出第1課:箭頭函數中的this究竟是什么鬼? Jav...

    AaronYuan 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<