1. 程式人生 > >js實現字元全排列演算法

js實現字元全排列演算法

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>字元全排列</title>
</head>
<body>
     
 
<script>
function charsMap(o){
    o = (o+"").replace(/(\w)(?=\w*\1)/g,"").replace(/\s+/g,""); //去除重複字元以及空白字元
    switch(o.length){
        case 0: 
        case 1: return [o];
        default: 
            var p = /^(\S+?)(\S)$/.exec(o), //使用正則將字串分割為n-1長度字串,以及最後一個字串。
                _r = charsMap(p[1]), 
                l = p[2], 
                r = [];
             
            for (var i = 0; i < _r.length; i++) {
                var t = _r[i];
                for (var j = 0, len = t.length; j <= len; j++) {
                    r.push( t.replace( new RegExp("^(\\S{"+j+"})(\\S{"+(len-j)+"})$"), "$1"+l+"$2" ) ); 
                    //字元插入位置從開頭前到結尾後,正則的作用相當於Array.splice(j,0,l); 在下標j的位置插入一個字元l
                }
            }
            return r;
    }
}
 
var arr = "abcde";
var t = new Date().getTime();
var result = charsMap(arr);
document.write( "總耗時:"+(new Date().getTime()-t)+"ms" );
 
    var html = "<ul><li>" + result.join("</li><li>") + "</li></ul>";
    document.write(html);
</script>
</body>
</html>


相關推薦

js實現字元排列演算法

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>字元全排列</title> </head> <body>

原創非遞迴實現排列演算法

Python語言描述 空間換時間的做法,藉助佇列去實現全排列 # ---------藉助佇列去實現全排列(原創)--------- from copy import copy class Per_node(object): def __init__(self,el

排列演算法遞迴實現

前言: 在一些演算法題當中有時需要進行全排列,是一個比較簡單的遞迴呼叫,在這裡記錄下,以後可以直接拿來使用。 過程: 例如{1,2,3,4,5}: 第一步: {1}和{2,3,4,5}的全排列組合; {2}和{1,3,4,5}的全排列組合; {3}和{2,1,4,5}的全排列組合; …

排列演算法及其C++實現(轉)

第十六章、全排列問題53.字串的排列。題目:輸入一個字串,打印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a、b、c 所能排列出來的所有字串abc、acb、bac、bca、cab 和cba。    分析:此題最初整理於去年的微軟面試100題中第53題,第二次整理於微軟、Google等公司非常好的

排列演算法c++實現

問題: Given a collection of numbers, return all possible permutations. For example, [1,2,3] have the following permutations: [1,2,3], [1,3

167 請程式設計實現排列演算法

67、請程式設計實現全排列演算法。 全排列演算法有兩個比較常見的實現:遞迴排列和字典序排列。 /* 67、請程式設計實現全排列演算法。 全排列演算法有兩個比較常見的實現:遞迴排列和字典序排列。 (1)遞迴實現 從集合中依次選出每一個元素,作為排列的第一個元素,然後對剩餘的

排列演算法【非遞迴活動數實現

求解一個問題,有很多種演算法/方法,一旦遇到比較有趣的思想/演算法,就忍不住記錄下來。 題:求n=4時的全排列(當n=4時,序列為:{1, 2, 3, 4}) 演算法的思想: 1. 給排列中的每個元素均賦予一個向左或向右的箭頭。 2. 如果元素k的箭頭指

[演算法學習]Java實現字串排列

思路:這裡用到遞迴的方式完成字元資料的全排列,遞迴確實很方便。看似沒用到輔助空間,實際上卻是消耗了棧空間(“遞迴棧”),遞迴用起來也不是那麼簡單,解決問題用遞迴的時候,一定要關注到兩個零界點,怎麼

字串排列演算法java實現

字串的全排列 遞迴方法實現要實現字串全排列 我覺得像是一種分治法的感覺。比如AB只有兩種 :AB BA到了ABC時可以抽出A 只看BC的話就是兩種,然後BC全排列之後放在A後面。隨後取出B對AC全排列放在B後面以此類推,此演算法非常精美 但是位數多了全排列數量會呈指數式增長。

排列演算法之Perm遞迴演算法實現

題目描述: 給定一個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。 我們假設對於小寫字母有'a' < 'b' < ... < 'y' < 'z',而且給定的字串中的字母已經按照從小到大的順序排列。 輸入: 輸入只有一行,是一個由不同的小寫字母組成的字串,已知字串的長度在1

排列演算法(java實現

100題目之53題目和70題目 在做100題目的時候,全排列的演算法困擾了很久,雖然網上了搜了一些資料,可是並沒有搞懂。今天花了一個下午的時間,從新梳理了一遍,終於弄明白了。 全排列的演算法,遞迴分析網上都有: 設一組數p = {r1, r2, r3, ... ,

排列及相關擴充套件演算法(一)——基礎的回溯遞迴實現排列演算法

1.全排列的定義和公式: 從n個數中選取m(m<=n)個數按照一定的順序進行排成一個列,叫作從n個元素中取m個元素的一個排列。由排列的定義,顯然不同的順序是一個不同的排列。從n個元素中取m個元素的所有排列的個數,稱為排列數。從n個元素取出n個元素的一個排列,稱為一個全

排列演算法思想和實現

全排列的演算法思想和實現(C++版)http://www.itmian4.com/forum.php?mod=viewthread&tid=3323 所謂全排列,就是將集合中元素的所有排列情況依次輸出。比如{1、2、3}的全排列為:123、132、213、231、

排列演算法的遞迴實現

(A、B、C、D)的全排列為 1、A後面跟(B、C、D)的全排列 2、B後面跟(A、C、D)的全排列 3、C後面跟(A、B、D)的全排列 4、D後面跟(A、B、C)的全排列 而對1中的(B、C

排列演算法的思想和C語言的程式碼實現

一、演算法思想 1、根本思想:遞迴 2、舉例設R={3,5,8,2}為需要排列的元素集合,{3,5,8,2}的全排列=3後面跟著{5,8,2}的全排列+5後面跟著{3,8,2}的全排列+8後面跟著{3,5,2}的全排列+2後面跟著{3,5,8}的全排列。對於{5,8,2

排列演算法實現(糾正“啊哈”演算法書籍中的錯誤)

本程式在VS2013下除錯通過,若有疑問可以評論大家探討 // DFS.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<

深度優先演算法實現字母排列(Java)

使用Java實現對任意字母的全排列,例如: 在字母ABC中排列出全部答案。使用一般的for迴圈方法也可以解出題目,這裡面就ABC三個字母,使用for迴圈的話也只不過三個迴圈巢狀罷了,如果是ABCDEF

排列演算法所有實現方式

一、遞迴 void permutation(char* a,int k,int m) { //a是序列陣列,k是開始位置,m是最後位置 int i,j; if(k == m)

js 數組排列組合算法

每次 下標 style ack 外部 避免 都是 post 直接 function doCombination(arr) { var count = arr.length - 1; //數組長度(從0開始) var tmp = []; var to

矩陣應用例項及js實現矩陣轉置演算法

場景: 後端返回的是[[‘2015-1-1’,1,1],[‘2015-1-2’,1,2]]這樣的Json陣列,代表的意思是2015-1-1這個日期下新增的資料為1,減少的資料為1,2015-1-2這個日期,新增的資料為1,減少的資料為2,但是在統計圖表上要在x軸顯示時間,y軸顯示新增和減少的資料這時,就要把