博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 47. 全排列 II
阅读量:4543 次
发布时间:2019-06-08

本文共 2270 字,大约阅读时间需要 7 分钟。

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

示例:

输入: [1,1,2]输出:[  [1,1,2],  [1,2,1],  [2,1,1]] 思路和上一题类似,知识这里要判断当前元素是否在前面出现过
1 class Solution { 2 public: 3    bool contain(vector
nums, int i, int j){ 4 for(int k = i; k < j; k++) 5 if(nums[j] == nums[k]) return true; 6 return false; 7 } 8 void permuteUnique(vector
&nums, vector
>& ans, int begin, int end){ 9 if(begin == end){10 ans.push_back(nums);11 return;12 }else{13 for(int i = begin; i <= end; i++){14 if(contain(nums, begin, i)) continue;15 swap(nums, begin, i);16 permuteUnique(nums, ans, begin+1, end);17 swap(nums, begin, i);18 }19 }20 }21 22 void swap(vector
& nums, int i, int k){23 int temp = nums[i];24 nums[i] = nums[k];25 nums[k] = temp;26 }27 28 vector
> permuteUnique(vector
& nums) {29 vector
> ans;30 int len = nums.size()-1;31 permuteUnique(nums, ans, 0, len);32 return ans;33 }34 };

 

发现一种更优的解法, 就是在传递nums的时候不用引用,这样就只需要一次交换。判断是否是重复元素也方便很多

此外在调用函数前要先对nums进行排序

1 class Solution { 2 public: 3     void permuteUnique(vector
nums, vector
>& ans, int begin, int end){ 4 if(begin == end){ 5 ans.push_back(nums); 6 return; 7 }else{ 8 for(int i = begin; i <= end; i++){ 9 if(i > begin&&nums[i]==nums[begin]) continue;10 swap(nums[begin], nums[i]);11 permuteUnique(nums, ans, begin+1, end);12 }13 }14 }15 16 vector
> permuteUnique(vector
& nums) {17 vector
> ans;18 int len = nums.size()-1;19 sort(nums.begin(), nums.end());20 permuteUnique(nums, ans, 0, len);21 return ans;22 }23 };

 

转载于:https://www.cnblogs.com/mr-stn/p/8996947.html

你可能感兴趣的文章
C# 笔记
查看>>
[转]人人店短信插件开发
查看>>
[转]c# System.IO.Ports SerialPort Class
查看>>
14. 最长公共前缀
查看>>
Redis文档
查看>>
项目重构
查看>>
jquery 对象与DOM对象转换
查看>>
DELPHI 调用系统 ADO 配置窗体 提高软件易用性
查看>>
Mongodb 命令及 PyMongo 库的使用
查看>>
PAT甲级——A1056 Mice and Rice
查看>>
PAT甲级——A1080 Graduate Admission
查看>>
PAT甲级——A1060 Are They Equal
查看>>
程序编译
查看>>
Python监听键盘和鼠标事件
查看>>
2、文件夹
查看>>
jquery实现当前页面编辑
查看>>
初识rt-thread
查看>>
微服务架构下介质管理规范
查看>>
关于AutoCAD 2014的securityload…
查看>>
BM和KMP字符串匹配算法学习
查看>>