九章算法官网-原文网址
http://www.jiuzhang.com/problem/54/
题目
给定一个带重复元素的整数集合,求出这个集合中所有元素的全排列。对于集合[1,1,2],其本质不同的全排列有三个,分别为:
[1,1,2]
[1,2,1]
[2,1,1]
在线测试本题
http://lintcode.com/problem/unique-permutations/
解答
首先做这个题目之前,要先会不带重复元素的全排列。
程序参考:http://www.ninechapter.com/solutions/permutations/
然后对于带重复元素的全排列,首先要对所有数排序,让重复的元素挤在一起。然后使用全排列的算法查找每一个排列。但是在构造每个排列的过程中加一句判断:
if (visited[i] == 1 || (i != 0 && num[i] == num[i - 1] && visited[i - 1] == 0)) {
continue;
}
这句判断的作用是,在选择重复的数的过程中,必须从第一个数开始取。如1 2 2。构造的时候,应该先选择第1个2,再选择第2个2。如果跳过第一个2选了第二个2,就会
程序参考:http://www.ninechapter.com/solutions/permutations-ii/
时间: 2024-10-08 03:45:06