博客
关于我
没有重复项数字的所有排列
阅读量:675 次
发布时间:2019-03-17

本文共 1781 字,大约阅读时间需要 5 分钟。

没有重复项数字的所有排列

示例说明

以下是数字 1, 2, 3 的所有排列,输出顺序按字典序排列:

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

代码实现

方法思路

我们可以使用递归的方法来解决获得所有排列问题。递归的基本思路是逐步选择数字并记录选择情况,直到所有位置都被填满为止。具体来说,我们可以使用一个布尔数组来跟踪已经选择的数字位置,避免重复项排列。

递归实现

#include 
#include
#include
#include
#include
using namespace std;class Solution { vector
> result; vector
res; void dfs(vector
num, deque
used) { if (res.size() == num.size()) { result.push_back(res); return; } for (int i = 0; i < num.size(); ++i) { if (used[i]) continue; res.push_back(num[i]); used[i] = true; dfs(num, used); res.pop_back(); used[i] = false; } } vector
permutate(vector
num) { int nsize = num.size(); deque
used(nsize, false); dfs(num, used); sort(num.begin(), num.end()); return result; }};

逐步说明

  • 问题分析

    给定一组没有重复项的数字,要求生成该数字的所有排列并按字典序输出。例如,数字 [1, 2, 3] 的所有排列包括 [[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]

  • 递归原理

    遍历每个数字,依次将其添加到结果列表中。如果当前结果的长度等于输入数字的长度,则将该排列添加到结果列表中。然后回溯(撤销选择),继续尝试下一个数字。

  • 去重和排序

    在回溯结束后,对结果列表进行排序,以确保输出顺序符合字典序要求。

  • 代码结构

    #include 
    #include
    #include
    #include
    #include
    using namespace std;class Solution {private: vector
    > result; vector
    res;public: vector
    permutate(vector
    num) { int nsize = num.size(); deque
    used(nsize, false); dfs(num, used); sort(num.begin(), num.end()); return result; }private: void dfs(vector
    num, deque
    used) { if (res.size() == num.size()) { result.push_back(res); return; } for (int i = 0; i < num.size(); ++i) { if (used[i]) continue; res.push_back(num[i]); used[i] = true; dfs(num, used); res.pop_back(); used[i] = false; } }};

    总结

    通过上述方法,我们可以高效地生成没有重复项数字的所有排列,并确保输出结果符合字典序要求。该方法利用回溯算法逐个选择和排除数字,避免了重复项的生成,适合处理较小规模的数字集合。

    转载地址:http://egdhz.baihongyu.com/

    你可能感兴趣的文章
    创建线程方式
    查看>>
    线程池
    查看>>
    Netty读写方法
    查看>>
    LRUCache
    查看>>
    Mac上如何强制关闭应用
    查看>>
    关于Linux系统中touch命令的说明
    查看>>
    剑指Offer03-数组中重复的数字
    查看>>
    将windows里的内容直接复制粘贴到ubuntu,提高效率
    查看>>
    将tomcat设置成window自启动服务
    查看>>
    webservice 远程服务器返回错误:(400)错误的请求
    查看>>
    [日常] PHP与Mysql测试kill慢查询并检验PDO的错误模式
    查看>>
    [PHP] try catch在日常中的使用
    查看>>
    [Linux] 进程间通信
    查看>>
    [PHP] error_reporting(0)可以屏蔽Fatal error错误
    查看>>
    [操作系统]内存连续分配管理方式
    查看>>
    C++ Primer Plus【复习笔记】-【复合类型】
    查看>>
    thinkphp 的一些重要知识点
    查看>>
    Python基础案例教程
    查看>>
    Java学习第二章——Java基本语句
    查看>>
    形状类似小于等于号的符号是啥
    查看>>