求1~n的全排列组合
生活随笔
收集整理的這篇文章主要介紹了
求1~n的全排列组合
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.題目:給定一個數字n,求它的全排列
如n=3,則它的全排列組合方式有如下所示:
1 2 3?
1 3 2?
2 1 3?
2 3 1?
3 1 2?
3 2 1
2.思路:通過深度優先搜索來做,用一個數組來標記當前位置,一個數組來記錄當前位置所代表的的值,只要未標記就加入排列數組中,當數組中元素達到n時,輸出這個排列,并取消對應位置的標記
3.代碼如下所示:
public class Main {public static void dfs(int pos,boolean flag[],int nums[]){//nums數組記錄排列的數組,if (pos>=nums.length){//若當前數組元素個數超過n,輸出數組中元素for (int i = 0; i <nums.length ; i++) {System.out.print(nums[i]+" ");}System.out.println();}else {//若還未排列完畢,繼續添加元素for (int i = 0; i <nums.length ; i++) {if (!flag[i]){//若當前位置還未被添加到數組中,訪問這個位置對應的元素nums[pos]=i+1;//添加數字到當前排列中去flag[i]=true;//標記此位置,代表這個位置的元素已被添加dfs(pos+1,flag,nums);//繼續添加其余位置的元素flag[i]=false;//一趟排列采集到后,釋放此標記位置,讓其余排列能訪問到此位置}}}}public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();boolean flag[]=new boolean[n];int nums[]=new int[n];dfs(0,flag,nums);} }4.結果如下所示:
總結
以上是生活随笔為你收集整理的求1~n的全排列组合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态规划——硬币找零和币值最大化问题
- 下一篇: Java 的Comparator比较器用