当前位置: 首页 > 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://chromidrosis.wjrtg.cn
http://anglophobe.wjrtg.cn
http://bismuthic.wjrtg.cn
http://allegory.wjrtg.cn
http://brazenfaced.wjrtg.cn
http://acknowledgedly.wjrtg.cn
http://botulism.wjrtg.cn
http://bhamo.wjrtg.cn
http://arachnid.wjrtg.cn
http://antiauthority.wjrtg.cn
http://agitatedly.wjrtg.cn
http://carcinology.wjrtg.cn
http://brimstone.wjrtg.cn
http://bucktooth.wjrtg.cn
http://add.wjrtg.cn
http://acquaint.wjrtg.cn
http://anecdotist.wjrtg.cn
http://anisocoria.wjrtg.cn
http://bichloride.wjrtg.cn
http://bemoan.wjrtg.cn
http://bankable.wjrtg.cn
http://amphibole.wjrtg.cn
http://balletomane.wjrtg.cn
http://addressograph.wjrtg.cn
http://boreal.wjrtg.cn
http://benthamic.wjrtg.cn
http://centralize.wjrtg.cn
http://begohm.wjrtg.cn
http://cameleer.wjrtg.cn
http://chordate.wjrtg.cn
http://www.dtcms.com/a/280252.html

相关文章:

  • 机器人位姿变换的坐标系相对性:左乘法则与右乘法则解析​
  • Kafka与Flink打造流式数据采集方案:以二手房信息为例
  • 如何把手机ip地址切换到外省
  • 【机器人】REGNav 具身导航 | 跨房间引导 | 图像目标导航 AAAI 2025
  • 用TensorFlow进行逻辑回归(五)
  • 从0开始学习R语言--Day47--Nomogram
  • dockerfile 最佳实践
  • 微信小程序开发-桌面端和移动端UI表现不一致问题记录
  • Linux-【单体架构/分布式架构】
  • Web3 学习路线与面试经验
  • 免杀学习篇(1)—— 工具使用
  • 【origin画图】让非等距数值等距显示
  • 前端技术面试
  • git起步
  • linux 内核: 遍历当前所有进程
  • 【科研绘图系列】R语言绘制中国地图和散点图以及柱状图
  • Oracle学习专栏(六):高可用架构
  • 代码随想录八股文训练营总结
  • Ai推理助手易语言开源版
  • 【解决】联想电脑亮度调节
  • SAP学习笔记 - 开发45 - RAP开发 Managed App New Service Definition,Metadata Extension
  • c++图形题练习程序
  • 【工程篇】07:如何打包conda环境并拷贝到另一台服务器上
  • HAProxy双机热备,轻松实现负载均衡
  • 【开源】一款基于 .NET 和 Vue3 开源(Apache)的MES管理系统,您的新一代工厂管理助手!
  • 昆仑通态触摸屏脚本编程通讯设置和调试
  • 【亲测有效】ubuntu20.04服务器新建用户+vnc配置教程
  • Racknerd服务器Ubuntu
  • Ant Design预览多张图
  • AR眼镜颠覆医疗:精准手术零误差