LeetCode : 46. Permutations 全排列

试题
Given a collection of distinct integers, return all possible permutations.

Example:

Input: [1,2,3]
Output:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

代码
把上次写的下一排列,调整一下。

class Solution {
    public List> permute(int[] nums) {
        Arrays.sort(nums);
        List> out = new ArrayList>();
        
        ArrayList tmp = new ArrayList<>();
        for(int n : nums) tmp.add(n);
        out.add(tmp);
        
        while(nextPermutation(nums)){
            // ArrayList tmp = new ArrayList(Arrays.asList(nums)); //错误写法,asList不支持int类型
            ArrayList tmpb = new ArrayList<>();
            for(int n : nums) tmpb.add(n);
            out.add(tmpb);
        }
        return out;
    }
    
    public boolean nextPermutation(int[] nums) {
        if(nums==null || nums.length<=1) return false;
        int len = nums.length;
        
        int cur = len-1;
        while(cur-1>=0 && nums[cur-1]>=nums[cur]) cur--;
        if(cur==0){
            return false;
        }
        
        cur--;
        int lo = cur;
        while(cur+1nums[lo]) cur++;
        swap(nums, lo, cur);
        reverse(nums, lo+1, len-1);
        return true;
    }
    
    public void reverse(int[] nums, int left, int right){
        while(left

你可能感兴趣的:(LeetCode)