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

济南国画网站建设如何制作自己的网站页制作

济南国画网站建设,如何制作自己的网站页制作,网站是否降权查询,小程序++wordpress全排列 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.dtcms.com/wzjs/538937.html

相关文章:

  • 巢湖网站建设常州网络推广价格
  • 网站建设基本范例vs做的网站如何使用
  • 用腾讯云做淘宝客购物网站视频建设网站的市场机会
  • 网站开发 分工小面网站建设
  • 虚拟主机WordPress建站凡科互动游戏可以作弊码
  • 怎么把网站变成免费的wordpress手动备份
  • 凡科网电脑版怎么做网站网站建设与设计实验报告
  • 做a免费视频在线观看网站青岛即墨网站开发
  • wap网站是什么淘客选品网站开发
  • 网站项目开发流程深圳建设集团有限公司地址
  • 网站怎么添加背景建站还有前途么
  • 网站开发实施方案北京做网站好的公司
  • 学做网站在什么地方学模板加官网主页
  • 做视频网站需要什么样的配置简述网站设计基本流程
  • 济宁哪里做网站蔺市网站建设
  • 深圳市建设交易中心网站首页网站seo做点提升流量
  • 高端定制网站建设高青云速网站建设
  • wordpress电影站开发网站备案号信息查询
  • 黄冈网站建设哪家便宜阳泉购物网站开发设计
  • 图片分享功能网站开发wordpress会员无法注册
  • 欧美风网站深圳教育科技网站建设
  • 模板建站哪里有原创服装设计师
  • 一网网站制作平台什么网站做视频给钱
  • 品牌网站建设可信大蝌蚪wordpress简洁淘宝客免费主题
  • 大学生网站开发与设计实训报告做教育的有哪些网站
  • wordpress码农主题烟台网站排名优化公司
  • 做网站莱芜WordPress自动截取
  • 软件网站模板wordpress關閉
  • 台州免费建站要求维护公司做网站整改的函
  • 北京网络公司网站做网页到哪个网站找素材