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

LeetCode--46.全排列

解题思路:

        1.获取信息:

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

                提示信息:1 <= nums.length <= 6

                                  -10 <= nums[i] <= 10

        2.分析题目:

                要获取到所有可能的全排列

                我们每次会从数组中取出一个数来作为一种排列的成员,直到取出过所有的数,那么就形成了一种排列

                而取下一个数又要依据前面取的数,防止取到相同的数,造成重复

                所以实际上的过程就是如下,以nums= [1,2,3]为例

                第一次取数:

                res=[ [1], [2], [3] ]

                第二次取数要依据前面取的数来取,我们就依次取出res中的元素:

                [1]:

                [1, 2],[1, 3]

                [2]:

                [2, 1],[2, 3]

                [3]:

                [3, 1],[3, 2]

                第三次取数:

                [1, 2]:

                等等,依次类推,我就不写完了,差不多看到这里应该就懂得我的思路了

        3.示例查验:

                示例1:可以用来检验思路是否正确

        4.尝试编写代码:

                (1)暴力法:(我觉得我的方法挺暴力的,所以就取了这个名字)

                        思路:跟上面所说的思路基本一致,只不过我加入了防止取到重复的数的步骤,并且使用了递归

                        防止取到重复的数的步骤,思路来源于提示信息,我们知道每个数的范围在一个较小的范围,我们就可以用数组来模拟哈希表进行查重的操作,具体可以看下面代码

class Solution {
public:vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>>res;//储存结果vector<bool>tab(21,true);//查重操作vector<int>path;//每一种排列GetRes(res,tab,nums,path);//递归return res;//返回结果}
private:void GetRes(vector<vector<int>>&res,vector<bool>&tab,vector<int>&nums,vector<int>&path){if(path.size()==nums.size()){//如果一种排列中的元素的数目等于数组中元素的数目res.push_back(path);return;}for(int i=0;i<nums.size();i++){if(tab[nums[i]+10]){//如果该元素不存在这种排列中path.push_back(nums[i]);tab[nums[i]+10]=false;GetRes(res,tab,nums,path);path.pop_back();tab[nums[i]+10]=true;}}}
};

今天的题解也完成了,就这样吧

http://www.lryc.cn/news/589192.html

相关文章:

  • 梳理Bean的创建流程
  • keeplived双击热备配置
  • 【高并发服务器】多路复用的总结 eventfd timerfd
  • 在Autodl服务器中使用VNC建立图形界面
  • JavaBean
  • 【亲测有效】ubuntu20.04服务器新建用户+vnc配置教程
  • 域名转发设置
  • linux 内核: 遍历当前所有进程
  • 演示扩展卡尔曼滤波在无人驾驶多传感器融合中的应用
  • Wiz笔记二次开发
  • 使用LNMP一键安装包安装PHP、Nginx、Redis、Swoole、OPcache
  • 可微分3D高斯溅射(3DGS)在医学图像三维重建中的应用
  • vllm本地部署qwen3-4b
  • 2.【C# in .NET】探秘数据类型:从底层机制到实战启示
  • 简单2步配置CadenceSkill开发编辑器,支持关键字高亮
  • 正则表达式使用示例
  • Ajax接收java后端传递的json对象包含长整型被截断导致丢失精度的解决方案
  • Flink SQL 性能优化实战
  • Nginx的反向代理
  • 光米投影 多余之物的本思
  • IPM31主板E3300usb键盘鼠标安装成功Sata接口硬盘IDE模式server2003-nt-5.2.3790
  • 服务器上PHP环境安装与更新版本和扩展(安装PHP、Nginx、Redis、Swoole和OPcache)
  • 26.将 Python 列表拆分为多个小块
  • 22.计算指定范围内数字的幂次和
  • 【c++】在const成员函数中使用mutex
  • CCF-GESP 等级考试 2025年6月认证Python四级真题解析
  • 【时时三省】(C语言基础)通过指针引用多维数组
  • mac上的app如何自动分类
  • MongoDB 数据库 启用访问控制
  • GitHub 上 Star 数量前 8 的开源 Web 应用项目