leetcode permutations(全排列)

來源:互聯網
上載者:User

標籤:

Given a collection of distinct numbers, return all possible permutations.

For example,
[1,2,3] have the following permutations:
[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].

這其實是一個全排列問題。具有較強的普遍性

一開始自己想了個辦法,但是這個辦法每次迴圈都要產生一個ArrayList標記已經訪問的位置,對於空間的浪費特別大。

遂在網上尋找更優的辦法。該辦法的核心思想就是:

全排列就是從第一個數字起每個數分別與它後面的數字交換。

public class Solution2 {    /**     * @param args     */    public   List<List<Integer>> permuteUnique(int[] nums) {                        ArrayList<List<Integer>> pool=new ArrayList<List<Integer>>();        f(nums,0,pool);        return pool;            }    public void f(int [] nums,int current,ArrayList<List<Integer>> pool)     {        if(current==nums.length)        {            ArrayList<Integer> tmp=new ArrayList<Integer>();            for(int n:nums)            {                tmp.add(n);                            }            pool.add(tmp);        }        for(int i=current;i<nums.length;i++)        {                        swap(nums,current,i);            f(nums,current+1,pool);            swap(nums,current,i);                                }        }    public void swap(int []nums,int i,int j)    {        int tmp=nums[j];        nums[j]=nums[i];        nums[i]=tmp;    }        }

 

顯然,該代碼的核心部分是for迴圈。

第一個swap交換元素,第二個swap的用意在於將交換過的元素再交換回來,保證數組的不變。

 

leetcode permutations(全排列)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.