全排列演算法-Java

來源:互聯網
上載者:User

標籤:

第一步,排列的精髓是交換和順序處理,比如,考慮[1,2,3,4]排列,實際上是,1和1,2,3,4分別交換得來
1和1交換:[1],[2,3,4]
1和2交換:[2],[1,3,4]
1和3交換:[3],[2,1,4]
1和4交換:[4],[2,3,1]

那麼下面分別考慮上面的四個結果,比如,考慮
[1],[2,3,4]

第二步,我們把[1]固定不變,考慮[2,3,4],把它看成是2和2,3,4分別交換,得到如下結果:
[1]固定,2和2交換:[1],[2],[3,4]
[1]固定,2和3交換:[1],[3],[2,4]
[1]固定,2和4交換:[1],[4],[3,2]

這個時候,再分別考慮第二步之後的三個結果,比如,考慮
[1],[2],[3,4]

第三步,我們把[1],[2]固定不變,考慮[3,4],把它看成是3和3,4分別交換,得到如下結果:
[1][2]固定,3和3交換:[1],[2],[3],[4]
[1][2]固定,3和4交換:[1],[2],[4],[3]

從上面分析可以看出,其實第二步就是對第一步的部分遞迴,同樣,第三步也是對第二步的部分遞迴,當最右邊只有一個數位時候,我們就進行輸出

代碼:

import java.util.Arrays;/** *  * <p> * ClassName MyPermutation * </p> * <p> * Description 排列, * </p> *  * @author TKPad [email protected] *         <p> *         Date 2015年3月20日 下午9:48:02 *         </p> * @version V1.0.0 * */// 從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的一個排列。當m=n時所有的排列情況叫全排列。public class MyPermutation {    // 交換兩個數    public void swap(int nums[], int i, int j) {        if (i == j) {            return;        }        int temp = nums[i];        nums[i] = nums[j];        nums[j] = temp;    }    public void permutation(int nums[], int start, int end) {        if (start == end) {            // 直接輸出            System.out.println(Arrays.toString(nums));        } else {            // 遞迴調用            for (int i = start; i < end; i++) {                swap(nums, start, i);// 開始交換                permutation(nums, start + 1, end);                swap(nums, i, start);// 將數組恢複原狀            }        }    }    public static void main(String[] args) {        int nums[] = new int[] { 1, 2, 3, 4 };        System.out.println("全排列:");        new MyPermutation().permutation(nums, 0, nums.length);    }}

全排列演算法-Java

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.