当前位置: 首页 > wzjs >正文

深圳建设局官网站电子商务毕业设计 网站建设

深圳建设局官网站,电子商务毕业设计 网站建设,哪个网站可以找做中厚板的公司,asp做网站策划书LeetCode47 目录 题目描述示例思路分析代码段代码逐行讲解复杂度分析总结的知识点整合总结 题目描述 给定一个可包含重复数字的整数数组 nums,按任意顺序返回所有不重复的全排列。 示例 示例 1 输入: nums [1, 1, 2]输出: [[1, 1, 2],[1, 2, 1],[2, 1, 1] ]…

LeetCode47

目录

  • 题目描述
  • 示例
  • 思路分析
  • 代码段
  • 代码逐行讲解
  • 复杂度分析
  • 总结的知识点
  • 整合
  • 总结

题目描述

给定一个可包含重复数字的整数数组 nums,按任意顺序返回所有不重复的全排列。


示例

示例 1

输入:

nums = [1, 1, 2]

输出:

[[1, 1, 2],[1, 2, 1],[2, 1, 1]
]

示例 2

输入:

nums = [1, 2, 3]

输出:

[[1, 2, 3],[1, 3, 2],[2, 1, 3],[2, 3, 1],[3, 1, 2],[3, 2, 1]
]

思路分析

问题核心

我们需要找到数组中所有不重复的全排列。由于数组可能包含重复数字,因此需要避免生成重复的排列。

思路拆解

  1. 排序
    • 将数组排序,使相同的数字相邻,方便后续去重。
  2. 深度优先搜索(DFS)
    • 使用 DFS 遍历所有可能的排列。
  3. 剪枝
    • 在 DFS 过程中,如果当前数字与前一个数字相同,并且前一个数字未被使用,则跳过当前数字,避免重复排列。
  4. 回溯
    • 在 DFS 过程中,使用 visited 数组标记已使用的数字,并在回溯时取消标记。

代码段

class Solution {public List<List<Integer>> permuteUnique(int[] nums) {Arrays.sort(nums); List<List<Integer>> res = new ArrayList<>();dfs(nums, new boolean[nums.length], new LinkedList<>(), res); return res;}private static void dfs(int[] nums, boolean[] visited, LinkedList<Integer> stack, List<List<Integer>> res) {if (stack.size() == nums.length) { res.add(new ArrayList<>(stack));return;}for (int i = 0; i < nums.length; i++) {if (i > 0 && nums[i] == nums[i - 1] && !visited[i - 1]) {continue;}if (!visited[i]) { stack.push(nums[i]); visited[i] = true; dfs(nums, visited, stack, res); visited[i] = false; stack.pop();}}}
}

在这里插入图片描述


代码逐行讲解

1. 排序

Arrays.sort(nums);
  • 将数组排序,使相同的数字相邻,方便后续去重。

2. 初始化结果列表

List<List<Integer>> res = new ArrayList<>();
  • res 用于存储所有不重复的排列。

3. 调用 DFS

dfs(nums, new boolean[nums.length], new LinkedList<>(), res);
  • 调用 DFS 函数,传入数组 numsvisited 数组(用于标记已使用的数字)、stack(用于存储当前排列)和结果列表 res

4. DFS 函数

private static void dfs(int[] nums, boolean[] visited, LinkedList<Integer> stack, List<List<Integer>> res) {
  • DFS 函数的定义,用于递归生成排列。

5. 找到一个排列

if (stack.size() == nums.length) {res.add(new ArrayList<>(stack));return;
}
  • 如果当前排列的长度等于数组长度,说明找到一个完整的排列,将其加入结果列表。

6. 遍历数组

for (int i = 0; i < nums.length; i++) {
  • 遍历数组中的每个数字,尝试将其加入当前排列。

7. 剪枝:避免重复排列

if (i > 0 && nums[i] == nums[i - 1] && !visited[i - 1]) {continue;
}
  • 如果当前数字与前一个数字相同,并且前一个数字未被使用,则跳过当前数字,避免重复排列。

8. 加入当前数字

if (!visited[i]) {stack.push(nums[i]);visited[i] = true;
  • 如果当前数字未被使用,将其加入当前排列,并标记为已使用。

9. 递归

dfs(nums, visited, stack, res);
  • 递归调用 DFS,继续生成下一个数字的排列。

10. 回溯

visited[i] = false;
stack.pop();
  • 回溯时取消当前数字的标记,并将其从当前排列中移除。

复杂度分析

时间复杂度

  • 全排列的数量为 O(n!),其中 n 是数组的长度。
  • 每次生成一个排列需要 O(n) 的时间。
  • 因此,总时间复杂度为 O(n * n!)

空间复杂度

  • 需要存储所有排列,空间复杂度为 O(n * n!)
  • 递归栈的深度为 n,因此额外空间复杂度为 O(n)

总结的知识点

1. 排序

  • 使用 Arrays.sort 对数组进行排序,方便后续去重。

2. 深度优先搜索(DFS)

  • 使用 DFS 遍历所有可能的排列。

3. 剪枝

  • 在 DFS 过程中,通过条件判断避免生成重复的排列。

4. 回溯

  • 在 DFS 过程中,使用 visited 数组标记已使用的数字,并在回溯时取消标记。

整合

class Solution {public List<List<Integer>> permuteUnique(int[] nums) {Arrays.sort(nums); // 排序List<List<Integer>> res = new ArrayList<>(); // 结果列表dfs(nums, new boolean[nums.length], new LinkedList<>(), res); // DFSreturn res;}private static void dfs(int[] nums, boolean[] visited, LinkedList<Integer> stack, List<List<Integer>> res) {if (stack.size() == nums.length) { // 找到一个排列res.add(new ArrayList<>(stack));return;}// 遍历 nums 数组for (int i = 0; i < nums.length; i++) {// 剪枝:避免重复排列if (i > 0 && nums[i] == nums[i - 1] && !visited[i - 1]) {continue;}if (!visited[i]) { // 如果当前数字未被使用stack.push(nums[i]); // 加入当前排列visited[i] = true; // 标记为已使用dfs(nums, visited, stack, res); // 递归visited[i] = false; // 回溯stack.pop(); // 移除当前数字}}}
}

总结

这段代码通过排序、DFS 和剪枝,能够高效地生成所有不重复的全排列。


文章转载自:

http://HT86HiQc.fkyqt.cn
http://OS9Jitpz.fkyqt.cn
http://8xxIX0JJ.fkyqt.cn
http://DLiCK1rY.fkyqt.cn
http://iF7BrtHX.fkyqt.cn
http://UZ0dV54H.fkyqt.cn
http://9JzFaqgT.fkyqt.cn
http://fZughUEn.fkyqt.cn
http://lduAcinn.fkyqt.cn
http://KHs7UrHp.fkyqt.cn
http://LztQMN46.fkyqt.cn
http://cvHHLCt4.fkyqt.cn
http://cM8M0H76.fkyqt.cn
http://jTIAG6AI.fkyqt.cn
http://P8ht5auU.fkyqt.cn
http://XtrU41jg.fkyqt.cn
http://da7Ej9QI.fkyqt.cn
http://7otj68zY.fkyqt.cn
http://gV6biwpX.fkyqt.cn
http://kfDjHEmf.fkyqt.cn
http://qOYqoyBL.fkyqt.cn
http://g4eyohzb.fkyqt.cn
http://u4abOy8w.fkyqt.cn
http://z3CirALJ.fkyqt.cn
http://aymSRSgs.fkyqt.cn
http://I7JMEWju.fkyqt.cn
http://wtVJlAlh.fkyqt.cn
http://dbE922xE.fkyqt.cn
http://319MsU2I.fkyqt.cn
http://Eryaqyj4.fkyqt.cn
http://www.dtcms.com/wzjs/716599.html

相关文章:

  • 外贸网站建设信息搜索引擎营销的实现方法
  • 企业网站系统官网wordpress页面权限
  • 网站机房建设成本少儿编程加盟十大机构
  • 页游开发企业网站优化公司
  • 怀化网站建设网站科技网络公司名字
  • 建设网站的傻瓜图文指南网站建设服务费怎么做会计分录
  • 服装毕业设计代做网站游学做的好的网站
  • 怎么建立自己的公司网站影楼做网站
  • 电子商务网站开发设计报告书宾果 wordpress
  • 有哪些网站可以做印度市场调研网站做效果图流程
  • 山东莱州市建设局网站wordpress3.5.2下载
  • 长沙网站制作有哪些公司wordpress 发货
  • 建设一个企业网站微信推广网站
  • 制作灯笼作文seo的基本步骤是什么
  • 如何整合网站中国十大it培训机构排名
  • 千里马招标网站网站开发亿玛酷适合5
  • 雅安建设局网站哪些网站可以免费申请
  • 课桌公司网站建设免费的视频api接口
  • 如何在网站上做标注电子商务网站的建站流程
  • 洛阳网站建设的公司2013网站怎么备案
  • 个人网站备案做论坛青海省交通建设管理局网站
  • 临沂地区建站网站wordpress 自动换行
  • 民制作网站哪家便宜wordpress如何制作主题
  • 嘉兴建网站雷州网站建设公司
  • 网站上传空间的ip地址吗注册劳务公司需要多少钱
  • 学做面包到什么网站wordpress图片存储方案
  • 塘厦基础网站建设东莞医院网站建设
  • 太原网站建设 网站制作黑群晖wordpress建站
  • 给别人做ppt的网站17网站一起做网店后台
  • 百度网站标题优化seo建站优化推广