1. 程式人生 > >Java遞迴實現全排列

Java遞迴實現全排列

最近整理之前自己學習Java時的一些程式碼筆記,可能都是一些比較基礎的Java知識,在這裡只是給需要的人蔘考一下。

遞迴演算法:將資料分為兩部分,遞迴將資料從左側移右側實現全排列 

package interview;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class FullSort {  
    //將NUM設定為待排列陣列的長度即實現全排列  
    private static int NUM = 5;  
  
    /** 
     * 遞迴演算法:將資料分為兩部分,遞迴將資料從左側移右側實現全排列 
     * 
     * @param datas 
     * @param target 
     */  
    private static void sort(List<String> datas, List<String> target) {  
        if (target.size() == NUM) {  
            for (Object obj : target)  
                System.out.print(obj);  
            System.out.println();  
            return;  
        }  
        for (int i = 0; i < datas.size(); i++) {  
            List<String> newDatas = new ArrayList<String>(datas);  
            List<String> newTarget = new ArrayList<String>(target);  
            newTarget.add(newDatas.get(i));  
            newDatas.remove(i);  
            sort(newDatas, newTarget);  
        }  
    }  
  
    public static void main(String[] args) {  
        String[] datas = new String[] { "1", "2", "3", "4","5" };  
        sort(Arrays.asList(datas), new ArrayList<String>());  
    }  
  
}  

程式執行結果:

12345
12354
12435
12453
12534
12543
13245
13254
13425
13452
13524
13542
14235
14253
14325
14352
14523
14532
15234
15243
15324
15342
15423
15432
21345
21354
21435
21453
21534
21543
23145
23154
23415
23451
23514
23541
24135
24153
24315
24351
24513
24531
25134
25143
25314
25341
25413
25431
31245
31254
31425
31452
31524
31542
32145
32154
32415
32451
32514
32541
34125
34152
34215
34251
34512
34521
35124
35142
35214
35241
35412
35421
41235
41253
41325
41352
41523
41532
42135
42153
42315
42351
42513
42531
43125
43152
43215
43251
43512
43521
45123
45132
45213
45231
45312
45321
51234
51243
51324
51342
51423
51432
52134
52143
52314
52341
52413
52431
53124
53142
53214
53241
53412
53421
54123
54132
54213
54231
54312
54321

相關推薦

Java實現排列

最近整理之前自己學習Java時的一些程式碼筆記,可能都是一些比較基礎的Java知識,在這裡只是給需要的人蔘考一下。 遞迴演算法:將資料分為兩部分,遞迴將資料從左側移右側實現全排列  package interview; import java.util.ArrayLi

實現排列問題

問題: 有一組數R,需要輸出它的全排列。R的遞迴可定義如下: 當個數n為1時,Perm(R) = (r),其中r是集合R中唯一的元素 當個數n大於1時,Perm(R)由(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3),…,(rn)Perm(Rn)

原創非實現排列演算法

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

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

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

排列java實現

思路:全排列,對於陣列來說,就是某一個下標處可以放整個陣列所有的元素。因此每個位置的元素都用其後的各個元素依次與其進行互換,直到需要互換的是最後一個元素時,打印出來的結果就是某一種全排列,然後返回到上一個元素。返回時要注意需要再互換一次回覆到原來的狀態。 後來發現,原來以前寫過全排列:htt

字串排列 Java實現

思路:      字串的全排列和數字的全排列類似,舉個例子:字串為“ABC”,按照我們所學數學上的邏輯,先取出A,放入首位,剩下BC有兩種全排列情況,即ABC,ACB,同理,將A分別與B,C交換,於是字串"ABC"的全排列總共有6種。如何將這種邏輯轉換為程式碼:首先,可以肯定

Java使用實現排列的代碼

return ring out code 使用遞歸 遞歸 != -i 常用 將寫內容過程經常用到的一些內容備份一下,下邊內容是關於Java使用遞歸實現全排列的內容。 public class AllPermutation { public static void m

排列與組合的Java實現 (參考)

我們在筆試面試過程中經常會遇到關於排列與組合的問題,其實這些可以通過遞迴簡單的實現,看下面兩個例子: (1)關於字串排列的問題 輸入一個字串,打印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a、b、c所能排列出來的所有字串abc、acb、bac、bca、ca

解決排列生成演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

JAVA——實現n的階乘

n的階乘的演算法:n*(n-1)*(n-2)… *1 例如5的階乘為:5 * 4 *3 * 2 * 1 程式碼如下: //遞迴實現n的階乘 import java.util.Scanner; public class Factorial1{ //實現階乘的方法——使用遞迴 //要接收一

——以排列和n皇后問題舉例

筆記來自【晴神寶典】 一、遞迴 遞迴 就在於反覆呼叫自身函式,但是每次都把問題範圍縮小,直到範圍可以縮小到可以直接得到邊界資料的結果,然後在返回路上求出對應的解。以上可看出,遞迴很適合用來實現分治思想。 遞迴兩個很重要的組成組成: 1、遞迴邊界(出口); 2、遞迴式

排列(實力蒙)

#include <iostream> using namespace std; void swap(int &a,int &b) {  int temp=a;   a=b;   b=temp; } void pai_xu(int a[]

平衡二叉樹的java實現

平衡二叉樹的操作難點在於如何調整平衡,根據情況可以分為LL、RR、LR、RL旋轉四種方法,這是java的遞迴版本,後面打算用非遞迴實現一下,此部落格是根據部落格:http://blog.csdn.net/javazejian整理而成,原部落格圖文並茂,應該是花了不少心思研究,講得也非常詳細,特此整理

java 實現迴圈比賽日程

在java實現迴圈比賽日程的程式中,主要運用的思想就是分治法。        分治法:通俗的理解就是在實際需要解決的問題當中,將大的問題分成小的問題,逐次分割,直到達到容易解決的範圍。然後再將分割的小域的解按一定規律組合在一起成為“母”

java實現商品分類例子

在對商品進行分類時,類別表會出現父節點 遞迴查詢本節點的id及孩子節點的id /** * 遞迴查詢本節點的id及孩子節點的id * @param categoryId* @return*/public ServerResponse<List<Integer

java實現斐波那契數列

/** *create Date:2016-12-23 *modified Date:2016-12-23 *modified by:shark *Description:斐波那契數列 **/ public class Shulie{public static long d

警察智力訓練--藍橋杯歷年java真題(java實現eval演算法)

匪警請撥110,即使手機欠費也可撥通!    為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!    某批警察叔叔正在進行智力訓練:    1 23 4 5 6 7 8 9 = 110;    請看上邊

Java 實現漢諾塔問題

漢諾塔問題就是:有ABC三根柱子,A柱子上從上到下摞了很多體積依次遞增的圓盤,如果將圓盤從A移動到C柱子,且依然保持從上到下依次遞增。 class Hanio{ public void moveOn

解決排列問題+詳細圖解執行

問題描述:字串的排列 //輸入一個字串, 按字典序打印出該字串中字元的所有排列。 //例如輸入字串abc, 則打印出由字元a, b, c所能排列出來的所有字串abc, acb, bac, bca, cab和cba。 //結果請按字母順序輸出。 //長度不超過9(可能有字

Java實現輸入任意目錄,列出檔案以及資料夾

import java.io.File; import java.util.ArrayList; import java.util.Scanner; public class IOPractice { public static ArrayList&l