zoukankan      html  css  js  c++  java
  • LeetCode 【47. Permutations II】

    Given a collection of numbers that might contain duplicates, return all possible unique permutations.

    For example,
    [1,1,2] have the following unique permutations:

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

    思路1.
    这题与Permutations的区别在于他允许重复数字,最简单的就是利用1的结果,保存在一个set中,去重复后保存结果,但不够理想。

    思路2.

    对数组先进行排序,如果有重复数字,则跳过,需要注意的是,因为排序,如果采用引用传递,则会破坏排序,所以使用值传递。当然也可以使用引用传递,但每次传递后,把交换的数据交换回来并且对后序数组再进行排序。
    class Solution {
    public:
        vector<vector<int>> permuteUnique(vector<int>& nums) {
            vector<vector<int>> result;
    	    sort(nums.begin(),nums.end());
    	    permuteRec( 0, nums, result);
    	    return result;
        }
    
    private:
        void permuteRec( int start, vector<int> nums, vector<vector<int>> &result ){
    		if( start >= nums.size()){
    			result.push_back(nums);
    			return;
    		}
    		for( int i = start; i < nums.size(); i++ ){
                if( i > start && nums[i] == nums[start]) continue;
                swap( nums[start], nums[i] );
    			permuteRec( start+1, nums, result);
    		}
        }
    };
    

      

  • 相关阅读:
    nextLine() 、nextInt()的跳过问题
    Spring事务管理
    常见web错误码
    connect()函数
    int main(int argc,char*argv[])
    cin.getline函数
    TCP数据报结构以及三次握手(图解)
    TCP报文首部
    strtol函数
    MySQL简介
  • 原文地址:https://www.cnblogs.com/rockwall/p/5762329.html
Copyright © 2011-2022 走看看