JS全排列的7種演算法總結(不重複元素)
全排列是一種時間複雜度為:O(n!)的演算法。所有演算法均使用JavaScript編寫,可直接執行。
演算法一:迴圈,一組排列需要幾個元素就用幾個for(比較笨拙的方法)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<script type= "text/javascript" >
var str= "01,02,03,04" ;
var strArray=str.split( "," );
var len=strArray.length;
var newArray= new Array();
for ( var i=0;i<len;i++){
for ( var j=0;j<len;j++){
if (j!=i){
for ( var k=0;k<len;k++){
if (k!=i && k!=j){
for ( var l=0;l<len;l++){
if (l!=i && l!=j && l!=k){ newArray.push(strArray[i]+ " " +strArray[j]+ " " +strArray[k]+ " " +strArray[l]);
}
}
}
}
}
}
}
var len2=newArray.length;
document.write( "排列方式種類有:" + len2 + " 種<br />" );
for (i=0;i<len2;i++){
document.write(newArray[i] + "<br />" );
}
</script>
|
演算法二:交換演算法(遞迴)
相關推薦
JS全排列的7種演算法總結(不重複元素)
全排列是一種時間複雜度為:O(n!)的演算法。所有演算法均使用JavaScript編寫,可直接執行。 演算法一:迴圈,一組排列需要幾個元素就用幾個for(比較笨拙的方法) 1 2 3 4 5 6
dfs 全排列演算法(含重複元素)
1、數的全排列 求數字 1 ~ n 的全排列,例如 1~3 的全排列,輸出 1 2 3, 1 3 2 , 2 1 3, 2 3 1, 3 1 2, 3 2 1 #include<bits/stdc++.h> using namespace std; #define runfil
素數三種求法總結 (素數詳解)
#include<stdio.h> #include<string.h> #include<math.h> // 第一種 利用素數 分佈規律 int ispri
openCV人臉識別三種演算法實現(官網翻譯)
怎樣使用OpenCV進行人臉識別 友情提示,要看懂程式碼前,你得先知道OpenCV的安裝和配置,會用C++,用過一些OpenCV函式。基本的影象處理和矩陣知識也是需要的。[gm:我是簫鳴的註釋]由於我僅僅是翻譯,對於六級才過的我,肯定有一些翻譯錯的或
UVA 11525 Permutation-不重複全排列的第n項-(康託展開)
康託展開的公式 : X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! ai為整數,並且0<=ai<i(1<=i<=n) 適用範圍:沒有重複元素的全排列 (k-1)!就是表示第一
常見排序演算法總結(基於C++實現)
1.插入排序 1.1 直接插入 基本思想: 將待排序表看作左右兩部分,其中左邊為有序區,右邊為無序區,整個排序過程就是將右邊無序區中的元素逐個插入到左邊的有序區中,以構成新的有序區。 template<typename T> void
kettle----功能點用法總結(不定期更新)
技術分享 插入數據 ttl 指定 ima 用法 mage class 功能點 表輸入(從指定的數據庫中,讀取所查詢表的數據) 截圖如下: 允許簡易轉換: 替換SQL語句裏的變量: 從步驟插入數據: kettle----功能點用法總結(不定期更新)
Angular中響應式表單 FormBuilder、FormControl 、FormGroup、FormArray、setControl、setValue用法總結(不定時更新)
以我的專案作為示例,總結一下Angular響應式表單的應用和常用的方法: 1.建立表單 form.ts程式碼 import { Component, OnInit } from "@angular/core"; import { FormArray, FormBuilder, FormC
Python常用關鍵字和常用函式總結(不定期更新)
1.print('') #可以直接列印字串&列表裡的所有資料,python2.x中print “” 無需加括號 2.轉換字串:str() #將字元轉義成字串 3.字串: (1)string.title() #將字串轉義成標題(單詞首字母大寫) (2)字
對 HashMap remove 有一些元素無法清除的現象 總結(不完整版)
今天寫專案的時候發現了這樣的一個奇怪的現象: 下面將我寫的原始碼貼出來 searchedData 是我定義好的一個 並且資料put成功的一個HashMap,並且MapKey也保證了一致,也保證不會出現OutOfIndexException for (int i =
IDEA版本控制工具VCS中使用Git,以及快捷鍵總結(不使用命令)
場景介紹: 工作中多人使用版本控制軟體協作開發,常見的應用場景歸納如下: 假設小組中有兩個人,組長小張,組員小袁 場景一:小張建立專案並提交到遠端Git倉庫 場景二:小袁從遠端Git倉庫上獲取專案原始碼 場景三:小袁修改了部分原始碼,提交到遠端倉庫 場景四:小張從
c++開發中常見bug總結(不定期更新)
儘管平時千叮嚀萬囑咐,可是低階錯誤總是不可避免的會在程式開發過程中出現:因此博主記錄自己開發過程中出現過的錯誤,以便後期參考和總結:1. 通過指標加下標訪問陣列我自己寫的一段程式碼,通過結構體指標p_structA 逐個訪問結構體陣列A,A大小為3, 指標初始化, p_str
js奇奇怪怪的函數整理(不定時更新)(轉載+整理)
函數 結果 方法 arr som true 找到 都是 mage 刷題或者開發中總會看到別人用過很多看起來特別高大上的函數方法(可能是我水平不夠),這篇文章用來整理每次遇到的js函數,不定時更新,文中已標註轉載位置。 1.數組相關的函數 1.1.some()和every
隨筆-尋找旋轉排序陣列中的最小值(有重複元素)
題目: 假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。 ( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。 請找出其中最小的元素。 注意陣列中可能存在重複的元素。 示例 1: 輸入: [1,3,5] 輸出: 1
演算法-把n個數的每一種排列情況都列出來(排列組合)-全排列-字典序演算法(一看就懂)
首先需要介紹字典序演算法 比如 236541想找到下一個比它大的數 他有3個步驟 1.從最右邊開始找到第一組 左小於右的數 41 54 65 36 23 這樣找,很顯然,我們找到36就找到了,後面的就不用找了。 2.找到之後立刻交換嗎?不是的。定位了這個3以後,再從右邊開始
比較全面的Adaboost演算法總結(一)
目錄: 1. Boosting演算法基本原理 2. Boosting演算法的權重理解 3. AdaBoost的演算法流程 4. AdaBoost演算法的訓練誤差分析 5. AdaBoost演算法的解釋 6. AdaBoost演算法的正則化 7. AdaBoost演算法的過
7中排序演算法學習總結(圖解+程式程式碼)
我們通常所說的排序演算法往往指的是內部排序演算法,即資料記錄在記憶體中進行排序。 排序演算法大體可分為兩種: 一種是比較排序,時間複雜度O(nlogn) ~ O(n^2),主要有:氣泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序等。 另一種是非比較排
java 基礎知識-陣列的7種演算法(排序、求和、最值、遍歷...)
遍歷 遍歷就是把這個陣列的每個元素 顯示出來 遍歷的方法就是先定義這個陣列的大小,然後用FOR迴圈來完成陣列,例如double[] score = new double[5]; Scanner input = new Scanner(System.in); for
八種排序演算法總結(Java實現)
排序演算法有很多,在特定情景中使用哪一種演算法很重要。本文對幾種常見排序演算法做了簡單的總結。 一、氣泡排序 氣泡排序(BubbleSort)是一種簡單的排序演算法。它重複地走訪要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交
字串的全排列和組合演算法(遞迴非遞迴)
全排列在筆試面試中很熱門,因為它難度適中,既可以考察遞迴實現,又能進一步考察非遞迴的實現,便於區分出考生的水平。所以在百度和迅雷的校園招聘以及程式設計師和軟體設計師的考試中都考到了,因此本文對全排列作下總結幫助大家更好的學習和理解。對本文有任何補充之處,歡迎大家指出。