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軸顯示新增和減少的資料這時,就要把