Java練習 排列 Permutation 問題

2021-07-13 10:48:24 字數 1180 閱讀 8605

輸入個數n,自然數時,n屬於[1,9],輸出1~n所有不重複的排列(數字序列中不允許出現重複的數字);

字元時,n《字母表長度,輸出a~第n個字元的全排列。

按照排列組合,可知全排列個數為n!

對string s="abcde"的全排列,遞迴為(1)字首為a、s為"bcde"、直到s.length()為0.(2)字首為b、s為"acde"...的全排列。

package algorithm.recursion;

import static tips.print.*;

public class permutations

/*** 對string s="abcde"的全排列,遞迴為(1)字首為a、s為"bcde"、(2)字首為b、s為"acde"...的全排列。

* 直到s.length()為0

*/public static void permutation(string s)

private static void perm(string prefix, string s)

}}

輸入為3的輸出:

abcacbbac

bcacab

cba

對char arr的元素a、b、c全排列perm2(char a, int n) ,遞迴為(1)arr[0]換位到最後,前面的元素呼叫perm2( a,  n-1),直到n == 1;還原;(2)arr[1]換位到最後...

package algorithm.recursion;

import static tips.print.*;

public class permutations

/*** 對char arr的元素a、b、c全排列perm2(char a, int n) ,遞迴為

* (1)arr[0]換位到最後,前面的元素呼叫perm2( a, n-1),直到n == 1;還原;

* (2)arr[1]換位到最後...

*/private static void perm2(char a, int n)

for (int i = 0; i < n; i++)

}private static void swap(char a, int i, int j)

}

練習10-29.:

java 數字排列

題目 用1 2 3 4 5這五個數字,列印出所有不同的數字排列,如 51234 41235 31254等,要求 4 不能在第三位,3 與 5 不能相連,乙個排列中數字不能重複。題目分析 該五個數字組合實際上是乙個數,這個數中最大為54321,最小為12345,因此可以用迴圈遍歷出來。程式設計實現 p...

遞迴練習 全排列

從n個不同元素中任取m m n 個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m n時所有的排列情況叫全排列。這種題目需要典型的遞迴手段,在一般的面試題目中也會經常出現。遞迴的題目在設計的時候要注意遞迴邊界和遞迴條件。按這樣的框架去設計演算法不容易再無窮的遞迴中迷失自...

全排列 Java實現

public static void permutation charss,int i if i ss.length 1 else 可以看到先是a和a交換了位置 相當於沒交換,但也算一種情況 然後進行遞迴呼叫,從注釋4可以看到i 1,可以想到遞迴呼叫裡面就會依據當前已經交換了的狀態 此處a與a交換 ...