码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-05-13 10:29:20      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:leetcode   九章算法   lintcode   递归   深度搜素   

九章算法官网-原文网址

http://www.jiuzhang.com/problem/54/


题目

给定一个带重复元素的整数集合,求出这个集合中所有元素的全排列。对于集合[1,1,2],其本质不同的全排列有三个,分别为:

[1,1,2]

[1,2,1]

[2,1,1]


在线测试本题

http://lintcode.com/problem/unique-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,就会


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

标签:leetcode   九章算法   lintcode   递归   深度搜素   

原文地址:http://blog.csdn.net/jiuzhang_ninechapter/article/details/45680795

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!