• lintcode16- Permutations II- medium


    Given a list of numbers with duplicate number in it. Find all unique permutations.

    Example

    For numbers [1,2,2] the unique permutations are:

    [
      [1,2,2],
      [2,1,2],
      [2,2,1]
    ]

    递归。和前面的差不多,但维护一个boolean[] isVisited数组以保证同一数字前后顺序唯一。当前面的2还没有使用的时候,就不应该让后面的2使用。

    切记同元素问题处理要先sort!因为如果判断前后相同那要先把它们聚拢在一起。

    public class Solution {
        /*
         * @param nums:  A list of integers
         * @return: A list of unique permutations
         */
        public List<List<Integer>> permuteUnique(int[] nums) {
            // write your code here
            List<List<Integer>> result = new ArrayList<List<Integer>>();
    
            if (nums == null){
                return null;
            }
    
            if (nums.length == 0){
                result.add(new ArrayList<Integer>());
                return result;
            }
    
            boolean[] isVisited = new boolean[nums.length];
            //切记要先sort!!!不然下面判断相邻的相同就不对了
            Arrays.sort(nums);
            helper(new ArrayList<Integer>(), isVisited, nums, result);
            return result;
    
        }
        
        private void helper(List<Integer> current, boolean[] isVisited, int[] nums, List<List<Integer>> result){
            if(current.size() == nums.length){
                result.add(new ArrayList<Integer>(current));
            }
            
            for(int i = 0; i < nums.length; ++i){
                if(isVisited[i] || (i > 0 && nums[i] == nums[i - 1] && !isVisited [i - 1])){
                    continue;
                }
                isVisited[i] = true;
                current.add(nums[i]);
                helper(current, isVisited, nums, result);
                current.remove(current.size() - 1);
                isVisited[i] = false;
            }
        }
    }
  • 相关阅读:
    CGI与fastcgi
    【总结】手动配置LNMP环境之安装NMP
    yum方式安装的Apache目录详解和配置说明
    W. Mysql
    V. PHP
    U. Apache
    学习进度条博客16
    构建之法阅读笔记05
    构建之法阅读笔记04
    构建之法阅读笔记03
  • 原文地址:https://www.cnblogs.com/jasminemzy/p/7568360.html
Copyright © 2020-2023  润新知