BackTracing——47. 全排列 II

2020-09-24  本文已影响0人  含泪若笑

这道题和46题不一样的是有重复元素,所以只需在46题基础上面剪掉重复的就好了。

为了便于剪枝,而且有重复元素,所以我们需要给数组先排序  Arrays.sort(nums);

然后需要加上这个判断去剪掉重复的 if(i != 0 && nums[i] == nums[i - 1] && !visited[i - 1]){  continue;}

这个的含义我想了挺久的,终于想明白了,就是因为有重复元素,所以他只选择了重复元素都被使用的那一条路,其他的有重复元素,但是没有都被访问的就都抛弃了。

!visited[i - 1]和visited[i - 1]都是可以的,不一样的是前者按照面去剪枝,而后者按照路径剪枝,面的效率更高一点。

代码:

https://github.com/hanleirx/LeetCode/blob/master/47.%20%E5%85%A8%E6%8E%92%E5%88%97%20II

上一篇 下一篇

猜你喜欢

热点阅读