美文网首页
BackTracing——47. 全排列 II

BackTracing——47. 全排列 II

作者: 含泪若笑 | 来源:发表于2020-09-24 11:55 被阅读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

    相关文章

      网友评论

          本文标题:BackTracing——47. 全排列 II

          本文链接:https://www.haomeiwen.com/subject/ydnnyktx.html