九章算法面试题54 带重复元素的全排列

时间:2015-05-13 10:29:20   收藏:0   阅读:253

九章算法官网-原文网址

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/


评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!