美文网首页
全排列 II

全排列 II

作者: 小白学编程 | 来源:发表于2018-11-20 22:57 被阅读0次

    给定一个可包含重复数字的序列,返回所有不重复的全排列。

    示例:

    输入: [1,1,2]
    输出:
    [
    [1,1,2],
    [1,2,1],
    [2,1,1]
    ]

    class Solution {
         public List<List<Integer>> permuteUnique(int[] nums) {
            List<List<Integer>> L = new ArrayList<>();
            perm2(nums, 0, L);
            return L;
            
        }
    
        public static void perm2(int[] nums, int start, List<List<Integer>> L) {
            if (start == nums.length) {
                List<Integer> list = new ArrayList<>();
                for (int n : nums) {
                    list.add(n);
                }
                boolean f = true;
                if (L.size() != 0) {
                    for (int i = 0; i < L.size(); ++i) {
                        if(L.get(i).equals(list)) {
                            f = false;
    
                            break;
                        }
                    }
                }
                if (f) {
                    L.add(list);
                }
                return;
    
            }
    
            for (int i = start; i < nums.length; i++) {
                swap(nums, start, i);
                perm2(nums, start + 1, L);
    
                swap(nums, i, start);
            }
    
    
        }
        
         public static void swap(int[] nums, int i, int j) {
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
    }
    

    相关文章

      网友评论

          本文标题:全排列 II

          本文链接:https://www.haomeiwen.com/subject/ufvfqqtx.html