• 周练(3)47. 全排列 II


    47. 全排列 II

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

    示例:

    输入: [1,1,2]
    输出:
    [
      [1,1,2],
      [1,2,1],
      [2,1,1]
    ]
    
    /*
    * @lc app=leetcode.cn id=47 lang=cpp
    *
    * [47] 全排列 II
    */
    // @lc code=start
    
    
    class Solution {
    public:
    	vector<int> vis;
    	vector<vector<int>> permuteUnique(vector<int>& nums) {
    		sort(nums.begin(), nums.end());
            vector<vector<int> > ans;
    		vector<int> t;
    		vector<int> vis(nums.size(), false);
    		premute(nums, 0, t, ans, vis);
    
    		return ans;
    	}
    
    	void premute(vector<int>& nums, int cur, vector<int>& t, vector<vector<int> >& ans, vector<int>& vis)
    	{
    		if (cur == nums.size()) 
    		{
    			ans.push_back(t);
    			return;
    		}
    
    		for (unsigned i = 0; i < nums.size(); ++i)
    		{
    			if (vis[i] || (i > 0 && nums[i] == nums[i-1] && !vis[i-1])) {
                    continue;
                }
                vis[i] = true;
                t.push_back(nums[i]);
                premute(nums, cur + 1, t, ans, vis);
                vis[i] = false;
                t.pop_back();
            }
    
    	}
    };
    
    // @lc code=end
    
  • 相关阅读:
    串行与并行
    并发性和并行性
    循环移位操作
    关于指针
    各种编程语言的特点
    什么是面向过程,什么是面向对象?
    数组指针/指针数组的示例
    数组指针/指针数组
    操作系统判断
    springMVC---简介
  • 原文地址:https://www.cnblogs.com/douzujun/p/13690774.html
Copyright © 2020-2023  润新知