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

phpcmsv9网站地图推广公司的网站

phpcmsv9网站地图,推广公司的网站,网站 百度认证,网站维护做啥的这段代码的目的是计算给定整数数组的所有全排列#xff08;permutations#xff09;#xff0c;并返回一个包含所有排列的二维数组。 思路解析 在这段代码中#xff0c;采用了 深度优先搜索#xff08;DFS#xff09; 和 回溯 的方法来生成所有的排列。 关键步骤#xf…这段代码的目的是计算给定整数数组的所有全排列permutations并返回一个包含所有排列的二维数组。 思路解析 在这段代码中采用了 深度优先搜索DFS 和 回溯 的方法来生成所有的排列。 关键步骤 1. 回溯我们通过交换数组中的元素将数组的每个元素依次放置到每个位置生成所有的排列组合。 2. 递归每次递归处理当前索引位置的元素继续处理下一个位置直到递归到数组的末尾表示完成一个排列。 3. 交换回溯在每次递归后通过交换操作还原数组的顺序避免对后续递归产生影响。 代码解析 class Solution {public:vectorvectorint ans;  // 用于存储所有的排列vectorvectorint permute(vectorint nums) {dfs(nums, 0);  // 从数组的第一个位置开始深度优先搜索return ans;  // 返回所有的排列}void dfs(vectorint nums, int n) {// 如果当前的索引等于数组的长度说明已经形成了一个排列if (n nums.size()) {ans.push_back(nums);  // 将当前排列加入结果集中return;}// 遍历当前索引位置后的所有元素for (int i n; i nums.size(); i) {swap(nums[i], nums[n]);  // 将第 i 个元素与第 n 个元素交换dfs(nums, n 1);  // 递归处理下一个位置swap(nums[i], nums[n]);  // 交换回去恢复原数组状态回溯}}}; 详细注释 1. vectorvectorint ans; • 用于存储所有的排列组合。 2. vectorvectorint permute(vectorint nums) • permute 是主函数接受一个整数数组 nums 作为输入返回一个包含所有排列的二维数组。 • dfs(nums, 0) 从 nums 的第 0 个位置开始深度优先搜索。 3. void dfs(vectorint nums, int n) • dfs 是深度优先搜索的核心函数负责递归生成排列。 • nums 是待排列的数组n 是当前递归处理的索引位置。 4. if (n nums.size()) • 如果当前的索引 n 等于数组的大小说明已经将所有元素排列完毕形成了一个有效的排列。 • ans.push_back(nums) 将当前的排列即 nums 数组的状态加入结果集 ans。 5. for (int i n; i nums.size(); i) • 遍历当前索引 n 之后的每一个元素通过交换生成不同的排列。 6. swap(nums[i], nums[n]); • 交换 nums[i] 和 nums[n]将 nums[i] 放到当前的位置 n。这样可以生成一个新的排列组合。 7. dfs(nums, n 1) • 递归调用 dfs将处理下一个位置的元素。即当前元素已放置好继续处理下一个索引。 8. swap(nums[i], nums[n]); • 交换回去恢复原数组状态这样可以进行下一轮的排列生成即回溯。这是为了确保后续的排列生成不会受到之前交换的影响。 好的接下来我会详细地继续补充并完成整个 深度优先搜索DFS 和 回溯 的运行步骤直到所有排列都生成完毕。 输入数组 nums [1, 2, 3] 运行步骤 我们通过 DFS 和回溯的方法生成 nums 数组的所有排列。 初始状态 • 输入nums [1, 2, 3] • ans []最终存储所有排列的结果 第 1 层递归n 0 (处理第一个位置) • 当前节点的起始值是 nums [1, 2, 3]n 0遍历 i 0 到 i 2。 1. 第 1 次交换swap(nums[0], nums[0])数组未变仍为 [1, 2, 3]。 • 递归调用 dfs(nums, 1)进入处理第二个位置。 第 2 层递归n 1 (处理第二个位置) • 当前节点的起始值是 nums [1, 2, 3]n 1遍历 i 1 到 i 2。 1. 第 1 次交换swap(nums[1], nums[1])数组未变仍为 [1, 2, 3]。 • 递归调用 dfs(nums, 2)进入处理第三个位置。 第 3 层递归n 2 (处理第三个位置) • 当前节点的起始值是 nums [1, 2, 3]n 2遍历 i 2 到 i 2只剩下一个位置。 1. 第 1 次交换swap(nums[2], nums[2])数组未变仍为 [1, 2, 3]。 • 递归调用 dfs(nums, 3)这时 n nums.size()说明当前排列已经完成。 2. 将 [1, 2, 3] 加入到 ans 中。 • ans [[1, 2, 3]] 回溯恢复状态 • 交换回去恢复原数组 [1, 2, 3]。 • 返回到 n 1继续处理 i 2。 2. 第 2 次交换swap(nums[1], nums[2])数组变为 [1, 3, 2]。 • 递归调用 dfs(nums, 2)进入处理第三个位置。 第 3 层递归n 2 (处理第三个位置) • 当前节点的起始值是 nums [1, 3, 2]n 2遍历 i 2 到 i 2只剩下一个位置。 1. 第 1 次交换swap(nums[2], nums[2])数组未变仍为 [1, 3, 2]。 • 递归调用 dfs(nums, 3)这时 n nums.size()说明当前排列已经完成。 2. 将 [1, 3, 2] 加入到 ans 中。 • ans [[1, 2, 3], [1, 3, 2]] 回溯恢复状态 • 交换回去恢复原数组 [1, 3, 2]。 • 返回到 n 1恢复原数组 [1, 2, 3]。 • 返回到 n 0恢复原数组 [1, 2, 3]。 第 2 次交换n 0 (处理第一个位置) 3. 第 2 次交换swap(nums[0], nums[1])数组变为 [2, 1, 3]。 • 递归调用 dfs(nums, 1)进入处理第二个位置。 第 2 层递归n 1 (处理第二个位置) • 当前节点的起始值是 nums [2, 1, 3]n 1遍历 i 1 到 i 2。 1. 第 1 次交换swap(nums[1], nums[1])数组未变仍为 [2, 1, 3]。 • 递归调用 dfs(nums, 2)进入处理第三个位置。 第 3 层递归n 2 (处理第三个位置) • 当前节点的起始值是 nums [2, 1, 3]n 2遍历 i 2 到 i 2只剩下一个位置。 1. 第 1 次交换swap(nums[2], nums[2])数组未变仍为 [2, 1, 3]。 • 递归调用 dfs(nums, 3)这时 n nums.size()说明当前排列已经完成。 2. 将 [2, 1, 3] 加入到 ans 中。 • ans [[1, 2, 3], [1, 3, 2], [2, 1, 3]] 回溯恢复状态 • 交换回去恢复原数组 [2, 1, 3]。 • 返回到 n 2继续处理 i 2。 2. 第 2 次交换swap(nums[1], nums[2])数组变为 [2, 3, 1]。 • 递归调用 dfs(nums, 2)进入处理第三个位置。 第 3 层递归n 2 (处理第三个位置) • 当前节点的起始值是 nums [2, 3, 1]n 2遍历 i 2 到 i 2只剩下一个位置。 1. 第 1 次交换swap(nums[2], nums[2])数组未变仍为 [2, 3, 1]。 • 递归调用 dfs(nums, 3)这时 n nums.size()说明当前排列已经完成。 2. 将 [2, 3, 1] 加入到 ans 中。 • ans [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]] 回溯恢复状态 • 交换回去恢复原数组 [2, 3, 1]。 • 返回到 n 1恢复原数组 [2, 1, 3]。 • 返回到 n 0恢复原数组 [1, 2, 3]。 第 3 次交换n 0 (处理第一个位置) 4. 第 3 次交换swap(nums[0], nums[2])数组变为 [3, 2, 1]。 • 递归调用 dfs(nums, 1)进入处理第二个位置。 第 2 层递归n 1 (处理第二个位置) • 当前节点的起始值是 nums [3, 2, 1]n 1遍历 i 1 到 i 2。 1. 第 1 次交换swap(nums[1], nums[1])数组未变仍为 [3, 2, 1]。 • 递归调用 dfs(nums, 2)进入处理第三个位置。 第 3 层递归n 2 (处理第三个位置) • 当前节点的起始值是 nums [3, 2, 1]n 2遍历 i 2 到 i 2只剩下一个位置。 1. 第 1 次交换swap(nums[2], nums[2])数组未变仍为 [3, 2, 1]。 • 递归调用 dfs(nums, 3)这时 n nums.size()说明当前排列已经完成。 2. 将 [3, 2, 1] 加入到 ans 中。 • ans [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1]] 回溯恢复状态 • 交换回去恢复原数组 [3, 2, 1]。 • 返回到 n 2恢复原数组 [3, 2, 1]。 • 返回到 n 1恢复原数组 [3, 2, 1]。 • 返回到 n 0恢复原数组 [1, 2, 3]。 最终结果 最终生成的排列 ans 中包含了所有可能的排列 ans [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]] 总结 1. DFS 遍历通过递归逐个处理每个位置生成所有可能的字符组合。 2. 回溯通过交换和恢复数组状态确保生成所有排列。 3. 最终生成了所有的排列并存储在 ans 中。 这样我们使用回溯和 DFS 的方法成功计算出了所有的排列并保存在 ans 数组中。
http://www.hkea.cn/news/14299352/

相关文章:

  • 旅行社网站建设规划书论文观察者网wordpress
  • 一键制作网站php招生网站开发
  • 网站上传服务器教程网店代运营就是个坑
  • 南京电信网站空间扩容小程序开发需要多少钱知乎
  • 东莞南城网站建设价格洛阳网站建设启辰网络
  • 自己做黑彩网站外贸网站销售方式
  • 7天精通网站建设实录网站群建设方案.doc
  • 个人博客网站制作搭建宁波seo网络推广公司
  • 厦门外贸网站建设公众号软文范例100
  • 网站开发类合同百度百科怎么创建自己
  • 湖北省建设安全管理协会网站泸州住院证明图片在线制作
  • 网站开发问题及解决网页制作教程视频
  • 男女做爰全过程网站南阳建站公司
  • 唐山中小企业网站制作没广告的视频播放器app
  • 高淳城乡建设局网站免备案wordpress主机空间
  • 青岛黄岛网站建设公司电话搜房网
  • 什么网站好建设h5互动的网站
  • 静态网站公用头部如何调用标题婚庆公司起名字大全免费
  • 移动网站开发教材开发工具在哪里
  • 搭建个网站需要多少钱整形网站优化
  • 钢管网站建设湖南定制响应式网站有哪些
  • 网站设计模板怎么使用湖南电商平台网站建设
  • 鞍山网站设计制作网站网络营销渠道的功能有
  • 河南网站建设工作室和县建设局网站
  • 上海专业网站建设网站今天出入苏州最新通知
  • 网站快速排名技巧房地产开发商是干什么的
  • 怎么做网站内容公司网站运营维护单位
  • 建网站 可以看到访客吗昆山建设招标信息网站
  • 深圳品牌医疗网站建设新浪微博网站建设
  • 安康网站建设智能小程序wordpress 源码讲解