1. 程式人生 > >java實現全排列問題

java實現全排列問題

stat abc oid () i++ scan 全排列 java實現 ...

1.問題描述:

    一組字符串的全排列,按照全排列的順序輸出,並且每行結尾無空格。

2.輸入:

    輸入一個字符串

3.輸入示例:

    請輸入全排列的字符串:
    abc

4.輸出示例:

    a b c
    a c b
    b a c
    b c a
    c b a
    c a b

5.解題思路:

    全排列問題在算法這類問題中屬於典型的遞歸與回溯類問題。這種題目一定要從整體去思考。通過輸入示例,我們可以觀察到,a,b,c三個字符,都可以放在第一個位置,都可以放在第二個位置,都可以放在第三個位置...根據這個思路,通過我們數學中的全排列公式,有三個位置□□□,第一個位置可以選3個,第二個位置選2個,第三個位置只能選一個。C(1,3)*C(1,2)*C(1,1) (表示不出來...就是數學裏面的組合公式)。如果是求組合的個數,則直接利用這個公式相乘,如果打印排列,則如下進行交換,直接在邊界條件打印即可,求代碼如下:


import java.util.Scanner;

public class PaiLie {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.println("請輸入全排列的字符串:");
String s= scn.next();
char[] shu = s.toCharArray();
//從第0個位置開始
pailie(shu,0);
}
public static void pailie(char shu[], int k){
if(k==shu.length){
for(int i=0;i<shu.length;i++){
System.out.print(shu[i] + " ");
}
System.out.println();
}
for(int i=k;i<shu.length;i++){
//交換
{char t = shu[k];shu[k] = shu[i];shu[i] = t;}
//遞歸,下一個數去排列
pailie(shu,k+1);
//交換回來
{char t = shu[k];shu[k] = shu[i];shu[i] = t;}
}
}
}

java實現全排列問題