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;}
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM