网易首页 > 网易号 > 正文 申请入驻

每日算法:全排列问题

0
分享至

作者: sisterAn 来源: 三分钟学前端

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

示例:

  • 输入: [1,2,3]
    输出:
    [
    [1,2,3],
    [1,3,2],
    [2,1,3],
    [2,3,1],
    [3,1,2],
    [3,2,1]
    ]
本题是回溯算法的经典应用场景

1. 算法策略

回溯算法是一种搜索法,试探法,它会在每一步做出选择,一旦发现这个选择无法得到期望结果,就回溯回去,重新做出选择。深度优先搜索利用的就是回溯算法思想。

2. 适用场景

回溯算法很简单,它就是不断尝试,直到拿到解。它的这种算法思想,使它通常用于解决广度的搜索问题,即从一组可能的解中,选择一个满足要求的解。

3. 代码实现

我们可以写一下,数组 [1, 2, 3] 的全排列有:

先写以 1 开头的全排列,它们是:[1, 2, 3], [1, 3, 2],即 1 + [2, 3] 的全排列;

再写以 2 开头的全排列,它们是:[2, 1, 3], [2, 3, 1],即 2 + [1, 3] 的全排列;

最后写以 3 开头的全排列,它们是:[3, 1, 2], [3, 2, 1],即 3 + [1, 2] 的全排列。

即回溯的处理思想,有点类似枚举搜索。我们枚举所有的解,找到满足期望的解。为了有规律地枚举所有可能的解,避免遗漏和重复,我们把问题求解的过程分为多个阶段。每个阶段,我们都会面对一个岔路口,我们先随意选一条路走,当发现这条路走不通的时候(不符合期望的解),就回退到上一个岔路口,另选一种走法继续走。

这显然是一个 递归 结构;

  • 递归的终止条件是:一个排列中的数字已经选够了 ,因此我们需要一个变量来表示当前程序递归到第几层,我们把这个变量叫做 depth ,或者命名为 index ,表示当前要确定的是某个全排列中下标为 index 的那个数是多少;
  • used(object):用于把表示一个数是否被选中,如果这个数字(num)被选择这设置为 used[num] = true ,这样在考虑下一个位置的时候,就能够以 O(1)的时间复杂度判断这个数是否被选择过,这是一种「以空间换时间」的思想。
  • let permute = function(nums) {
    // 使用一个数组保存所有可能的全排列
    let res = []
    if (nums.length === 0) {
    return res
    }
    let used = {}, path = []
    dfs(nums, nums.length, 0, path, used, res)
    return res
    }
    let dfs = function(nums, len, depth, path, used, res) {
    // 所有数都填完了
    if (depth === len) {
    res.push([...path])
    return
    }
    for (let i = 0; i < len; i++) {
    if (!used[i]) {
    // 动态维护数组
    path.push(nums[i])
    used[i] = true
    // 继续递归填下一个数
    dfs(nums, len, depth + 1, path, used, res)
    // 撤销操作
    used[i] = false
    path.pop()
    }
    }
    }

4. 复杂度分析

时间复杂度:O(n?n!),其中 n 为序列的长度

这是一个排列组合,每层的排列组合数为:Amn=n!/(n?m)! ,故而所有的排列有 :

A1n + A2n + … + An-1n = n!/(n?1)! + n!/(n?2)! + … + n! = n! * (1/(n?1)! + 1/(n?2)! + … + 1) <= n! * (1 + 1/2 + 1/4 + … + 1/2n-1) < 2 * n!

并且每个内部循环 n 次,故非叶子结点的时间复杂度为 O(n?n!)

  • 空间复杂度:O(n)

leetcode:https://leetcode-cn.com/problems/permutations/solution/quan-pai-lie-wen-ti-by-user7746o/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
俄朝谈妥,就等中方加入,普京满足金正恩,韩方被曝寻求中国支持

俄朝谈妥,就等中方加入,普京满足金正恩,韩方被曝寻求中国支持

坠入二次元的海洋
2024-06-19 12:58:09
我国又一项技术被卡脖子?日本撤走空调压缩机产线,国产谁能替代

我国又一项技术被卡脖子?日本撤走空调压缩机产线,国产谁能替代

飞花文史
2024-06-18 15:59:26
唯一在世的中共一代领导人,现107岁

唯一在世的中共一代领导人,现107岁

华人星光
2024-06-18 16:51:55
苏州楼市全军覆没,苏州园区某小区房价从50000多跌至34000多元

苏州楼市全军覆没,苏州园区某小区房价从50000多跌至34000多元

有事问彭叔
2024-06-17 21:26:54
上海这一夜,由王中磊牵头的明星聚会,将华谊的落魄展现淋漓尽致

上海这一夜,由王中磊牵头的明星聚会,将华谊的落魄展现淋漓尽致

先人后记
2024-06-19 00:01:03
6旬富商承认与林俊贤29岁女儿交往:她很单纯是一个好女孩

6旬富商承认与林俊贤29岁女儿交往:她很单纯是一个好女孩

开开森森
2024-06-19 14:42:14
后续!余琦被北京公安罚款!车中男子身份查明!竟新增二条违法!

后续!余琦被北京公安罚款!车中男子身份查明!竟新增二条违法!

喜欢农家生活的阿律
2024-06-19 13:20:33
CCTV5直播,黄金时间晚9点,克罗地亚生死战,德国赢球=提前晋级

CCTV5直播,黄金时间晚9点,克罗地亚生死战,德国赢球=提前晋级

凌空倒钩
2024-06-19 12:03:26
四川一村干部工作期间被打病发身亡,人社局:无法确认劳动关系,中止工伤认定

四川一村干部工作期间被打病发身亡,人社局:无法确认劳动关系,中止工伤认定

澎湃新闻
2024-06-19 07:06:26
外媒:因黑山总理迟到,到访的保加利亚总统拒绝等待,两人会晤取消

外媒:因黑山总理迟到,到访的保加利亚总统拒绝等待,两人会晤取消

环球网资讯
2024-06-19 12:45:14
县城的无奈,只剩下“公务员经济”,也快要坚持不下去了!

县城的无奈,只剩下“公务员经济”,也快要坚持不下去了!

钦点历史
2024-06-16 18:55:02
网友怒批!巴黎世家“姨妈裙”售价9.4万,初衷拒绝羞耻引发争议

网友怒批!巴黎世家“姨妈裙”售价9.4万,初衷拒绝羞耻引发争议

小毅讲历史
2024-06-18 05:45:04
姜萍事件反转开始了,留给姜萍一家、姜萍老师的时间不多了!

姜萍事件反转开始了,留给姜萍一家、姜萍老师的时间不多了!

开玩笑的水母
2024-06-18 22:00:10
这工资打败了全国50%的人!

这工资打败了全国50%的人!

人情皆文史
2024-06-17 17:20:43
酒井法子越老越丰满!微胖身材穿蕾丝裙紧绷绷,看脸却清纯如初

酒井法子越老越丰满!微胖身材穿蕾丝裙紧绷绷,看脸却清纯如初

时髦范
2024-06-07 10:51:02
追梦:输掉总决赛还不如不进季后赛 那样起码多了8周的假期

追梦:输掉总决赛还不如不进季后赛 那样起码多了8周的假期

直播吧
2024-06-19 14:21:12
李莉女士怀抱着无畏的精神,披露国际风云,却不幸陷入网暴漩涡中

李莉女士怀抱着无畏的精神,披露国际风云,却不幸陷入网暴漩涡中

橘色数码
2024-06-06 12:51:20
巴黎奥运会允许台湾以“台湾”的名义参加?国际奥委会:假的!

巴黎奥运会允许台湾以“台湾”的名义参加?国际奥委会:假的!

镜史阁
2024-06-18 20:15:02
尹鸿博:不能因为我们是小俱乐部就被人欺负,已经被气到不行了

尹鸿博:不能因为我们是小俱乐部就被人欺负,已经被气到不行了

直播吧
2024-06-19 09:02:22
董宇辉正在跌落神坛

董宇辉正在跌落神坛

电商报APP
2024-06-18 14:52:24
2024-06-19 19:54:44
Nodejs开发
Nodejs开发
分享只有程序员懂的干货
648文章数 824关注度
往期回顾 全部

科技要闻

618观察:谁为高强度的低价竞争买单?

头条要闻

白宫:美国不担心普京访朝 担心的是俄朝关系不断深化

头条要闻

白宫:美国不担心普京访朝 担心的是俄朝关系不断深化

体育要闻

欧洲杯最大的混子,非他莫属

娱乐要闻

黄一鸣“杀疯了” 直播间卖大葱养孩子

财经要闻

深化科创板改革 证监会发布八条措施

汽车要闻

双肾格栅变化大/内饰焕新 新一代宝马X3官图发布

态度原创

时尚
艺术
手机
教育
军事航空

50岁女人为什么不能乱穿衣?看了她们的造型就懂了,会穿才美

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

手机要闻

小米MIX Flip关键参数曝光:最强小折叠预定

教育要闻

自命题改统考?大批院校25考研初试科目调整公告!

军事要闻

菲律宾军方称中国海警登上菲方船只并缴枪 外交部回应

无障碍浏览 进入关怀版