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

天蝎网站建设杭州今天查出多少阳性

天蝎网站建设,杭州今天查出多少阳性,申报网站建设理由 模板,网站专栏建设工作方案全排列 https://leetcode.cn/problems/permutations/ 描述 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,…

全排列

  • https://leetcode.cn/problems/permutations/

描述

  • 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2

输入:nums = [0,1]
输出:[[0,1],[1,0]]

示例 3

输入:nums = [1]
输出:[[1]]

提示

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同

算法实现

1 )回溯1: 基于数组

function permute(nums: number[]): number[][] {const res: number[][] = [];// 回溯函数const backtrack = (path: number[]) => {// 满足当前条件if(path.length === nums.length) {res.push(path);return;}// 遍历for(let i = 0; i < nums.length; i++) {if(path.includes(nums[i])) continue;backtrack(path.concat(nums[i]));}}backtrack([]);return res;
}
  • 时间复杂度:O(n*n!)
    • 假设输入数组的长度为 n
    • 遍历每个元素的时间复杂度为 O(n)
    • 对于每个元素,都会进行递归调,假设数组中有 n 个不同的元素
    • 那么对于每个元素,都会有 n-1 个可能的选择,然后对于每个选择,又会有 n-2 个可能的选择,以此类推
    • 因此,递归的时间复杂度可以表示为 O(n!)。
    • 在每一层递归中,都会进行一次包含操作(includes),其时间复杂度为 O(n)。
    • 综合考虑,这段代码的时间复杂度为 O(n * n!),其中 n 表示输入数组的长度。
    • 需要注意的是,这里的时间复杂度分析基于平均情况。
    • 在最坏情况下,全排列的数量是 n!,因此在最坏情况下,时间复杂度为 O(n * n!)
    • 注意: n的阶乘公式: n! = 1*2*3*...*(n-1)*n
  • 空间复杂度:O(n)
    • 递归,堆栈,不是常量,是线性增长的
    • 是递归的层数

2 )回溯2: 基于交换

function permute(nums: number[]): number[][] {const res: number[][] = [];const backtrack = function(start: number) {if (start === nums.length - 1) {res.push([...nums]);return;}for (let i: number = start; i < nums.length; i++) {[nums[i], nums[start]] = [nums[start], nums[i]]; // 交换backtrack(start + 1); // 下一个数[nums[i], nums[start]] = [nums[start], nums[i]]; // 交换撤销}}backtrack(0); // 从 0 开始return res;
};
  • 这个问题可以看作有 n 个排列成一行的空格,我们需要从左往右依此填入题目给定的 n 个数,每个数只能使用一次
  • 那么很直接的可以想到一种穷举的算法,即从左往右每一个位置都依此尝试填入一个数
  • 看能不能填完这 n 个空格,在程序中我们可以用「回溯法」来模拟这个过程
  • 时间复杂度:O(n*n!),其中 n 为序列的长度
  • 空间复杂度:O(n)

回溯算法、递归和深度优先遍历(DFS)之间存在密切的关系

  • 它们通常在算法中一起使用,因为回溯算法通常使用递归来实现,并且常常涉及到深度优先遍历的思想。

  • 回溯算法与递归

    • 回溯算法是一种渐进式寻找并构建问题解决方案的策略。
    • 在回溯算法中,通常通过递归的方式来尝试所有可能的情况。
    • 当找到一个可能的解决方案时,它会继续探索下去,如果发现不符合条件,就会回溯到上一个状态,尝试其他可能的情况。
    • 因此,回溯算法通常使用递归来实现,因为递归天然地适合于处理这种尝试所有可能情况的问题。
  • 回溯算法与深度优先遍历

    • 回溯算法通常使用深度优先遍历的思想。
    • 在回溯算法中,我们会尝试一条路走到底,直到无法再继续下去,然后回溯到上一个状态,尝试其他的可能性。
    • 这与深度优先遍历的思想是一致的,深度优先遍历也是尽可能深地搜索树的分支,直到无法再继续为止
    • 然后回溯到上一个节点,继续搜索其他分支
  • 因此,回溯算法通常使用递归来实现,并且其思想与深度优先遍历密切相关。

  • 在许多情况下,回溯算法可以被视为一种特殊的深度优先遍历。

http://www.hrbkazy.com/news/50827.html

相关文章:

  • 网站广告销售怎么做青岛seo网站排名
  • 1920的做网站做多大在线种子资源库
  • 网站建设 从用户角度开始办理培训机构需要具备的条件
  • vue做移动端网站与pc端有什么区别网页搜索优化
  • 网站设计制作上海论坛平台
  • 网站关键词优化哪家正规百度seo排名原理
  • 做标准件网站什么是seo推广
  • 木方东莞网站建设技术支持宁波seo推广咨询
  • wordpress 类似博客百度seo代理
  • 机械设备东莞网站建设成品网站1688入口网页版
  • 怎么做外链淘宝关键词排名优化
  • 广告网站建设流程怎样做网络推广效果好
  • 响应式网站下载上海做推广的引流公司
  • pacdora 设计网seo排名优化价格
  • 科技风格设计网站2345系统导航
  • 上海企业制作网站有哪些广东短视频seo搜索哪家好
  • 珠海高端网站制作疫情最新资讯
  • 网站中的搜索功能怎么做近期时事新闻
  • 营销型外贸网站制作seo优化网络公司排名
  • 网络销售怎么做网站产品推广计划方案模板
  • 建设银行网站 查余额查询网页制作软件有哪些
  • 做网站怎么插音频产品营销
  • 网站服务器怎么建设百度号码查询平台
  • 直播网站app下载网页设计模板网站免费
  • 惠州做网站开发互联网广告是做什么的
  • 网站图片切换怎么做国内营销推广渠道
  • 适合0基础网站开发软件百度热搜电视剧
  • 设计素材网站推荐2023在线收录
  • 济南seo排名搜索seo品牌推广方法
  • 4k视频素材网站如何进行百度推广