zoukankan      html  css  js  c++  java
  • lintcode-16-带重复元素的排列

    带重复元素的排列

    给出一个具有重复数字的列表,找出列表所有不同的排列。

    样例

    给出列表 [1,2,2],不同的排列有:
    [
    [1,2,2],
    [2,1,2],
    [2,2,1]
    ]

    挑战

    使用递归和非递归分别完成该题。

    标签

    领英 递归 深度优先搜索

    code

    class Solution {
    public:
        /**
         * @param nums: A list of integers.
         * @return: A list of permutations.
         */
        vector<vector<int> > permute(vector<int> nums) {
            // write your code here
            vector<vector<int> > result;
            int size = nums.size();
            if(size == 0) {
                result.push_back(nums);  
                return result; 
            }
    
            permute(nums, 0, size, result);
    
            return result;
        }
    
        void permute(vector<int> &nums, int begin, int end, vector<vector<int> > &result) {
            if(begin == end) {
                if(!isExist(nums, result)) {
                    result.push_back(nums);
                }
            }
            else {
                for(int i=begin; i<end; i++) {
                    int temp = nums[i];
                    nums[i] = nums[begin];
                    nums[begin] = temp;
    
                    permute(nums, begin+1, end, result);
    
                    temp = nums[i];
                    nums[i] = nums[begin];
                    nums[begin] = temp;
                }
            }
        }
    
        bool isExist(vector<int> &nums, vector<vector<int> > &result) {
            int size = result.size();
            if(size == 0)
                return false;
            for(int i=0; i<size; i++) {
                if(isSameNums(nums, result[i])) {
                    return true;
                }
            }
            return false;
        }
    
        bool isSameNums(vector<int> &nums1, vector<int> &nums2) {
            int size = nums1.size();
            for(int i=0; i<size; i++) {
                if(nums1[i] != nums2[i]) {
                    return false;
                }
            }
            return true;
        }
    };
    
  • 相关阅读:
    java垃圾回收机制
    mysql的find_in_set函数操作
    mysql中常见的sql语句语法书写操作
    如何破坏双亲委派原则
    mysql中临时表的创建
    spring当中的事务处理
    restTemplate调用操作出现乱码
    mysql中的any_value的基本使用操作
    DTD与XSD的区别
    idea的插件
  • 原文地址:https://www.cnblogs.com/libaoquan/p/6986365.html
Copyright © 2011-2022 走看看