建设银行网站电脑版wordpress discuz
news/
2025/9/30 14:18:35/
文章来源:
建设银行网站电脑版,wordpress discuz,接外包项目的网站,餐厅网络推广方案题目描述#xff1a;给定一个可包含重复数字的序列 nums #xff0c;按任意顺序 返回所有不重复的全排列。 题目链接#xff1a;LeetCode-47-全排列Ⅱ 解题思路#xff1a;注意题目中给的是包含重复数字#xff0c;所以需要去重操作#xff1b; 这道题不需要 startIndex给定一个可包含重复数字的序列 nums 按任意顺序 返回所有不重复的全排列。 题目链接LeetCode-47-全排列Ⅱ 解题思路注意题目中给的是包含重复数字所以需要去重操作 这道题不需要 startIndex因为每次都从下标 0开始是排列问题终止条件是path.size()nums.length在每个叶子节点收获结果最重要的是去重操作到底是树枝去重还是树层 去重应该是都可以的只是效率上来说树层去重更快一些所谓的树层去重就是 nums[i]nums[i-1],以及前一个元素没有被使用过 used[i-1]false。 代码实现 class Solution {// 和 46 全排列相比多了2步去重的操作树层去重public ListListInteger permuteUnique(int[] nums) {Arrays.sort(nums);// 要先排序方便处理相同的元素backTracking(nums, new boolean[nums.length]);return res;}ListListInteger res new ArrayList();ListInteger path new ArrayList();public void backTracking(int[] nums, boolean[] used){if (path.size() nums.length){res.add(new ArrayList(path));return;}for (int i 0; i nums.length; i) {// used[i-1]true : 说明树枝前一个元素已经取过// used[i-1]false : 说明树层前一个元素没有取过// 如果同一个树层的元素使用过则continueif (i0 nums[i]nums[i-1] used[i-1]false){// 树层去重当前没有使用并且和前一个数不相等continue;}if (used[i]){// 当前的位置还没有使用过必须加上这个判断不然会有很多重复的组合continue;}path.add(nums[i]);used[i]true;backTracking(nums, used);used[i]false;path.remove(path.size()-1);}}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922920.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!