• 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;
        }
    };
    
  • 相关阅读:
    牛客寒假算法集训 1
    求逆序数——树状数组
    牛客网 被3整除的子序列 区间dp
    SICNU 2019 winter training #2(codeforces #531 Div3)
    iOS 给已有的类添加属性.
    coredata实践
    IOS 数据库升级
    获取当前屏幕显示的viewcontroller
    ios 自顶一个view
    mac 修改文件夹权限.
  • 原文地址:https://www.cnblogs.com/libaoquan/p/6986365.html
Copyright © 2020-2023  润新知