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

示例:

输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————
主要参考leetcode的牛人题解,具体可以点击进去看看。
解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考 3 个问题:

  1. 路径:也就是已经做出的选择。
  2. 选择列表:也就是你当前可以做的选择。
  3. 结束条件:也就是到达决策树底层,无法再做选择的条件。

代码方面,回溯算法的框架:

result = []
def backtrack(路径, 选择列表):if 满足结束条件:result.add(路径)returnfor 选择 in 选择列表:做选择backtrack(路径, 选择列表)撤销选择作者:labuladong
链接:https://leetcode-cn.com/problems/permutations/solution/hui-su-suan-fa-xiang-jie-by-labuladong-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

具体的c++代码如下所示:

class Solution {private:vector<vector<int>> num;  # 用于返回题目要求的答案
public:vector<vector<int>> permute(vector<int>& nums) {vector<int> men;  # 用于存储已经使用的变量function(nums, men);  # 回溯函数return num;}void function(vector<int>& nums, vector<int>& men){if(nums.size() == men.size())  # 如果每个变量都已经被遍历{num.push_back(men);  # 则返回这个值到二维数组中return;}for(int i=0;i<nums.size();++i)  # 遍历每个元素{vector<int>::iterator it;  # 检查该元素是否已经存在于men中it=find(men.begin(),men.end(),nums[i]);if(it!=men.end())continue;men.push_back(nums[i]);function(nums,men);men.pop_back();}}
};

leetcode - 46. 全排列(对vector容器的元素进行搜索,判断是否存在vector中)相关推荐

  1. 把一个vector里的元素全部放入另外一个vector

    把一个vector里的元素全部放入另外一个vector std::vector<int> src; std::vector<int> dest; dest.insert(des ...

  2. LeetCode 46. 全排列(回溯)

    文章目录 1. 题目信息 2. 解题 2.1 利用hash map解决 2.2 改用bool数组判断是否出现过 1. 题目信息 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例:输入: [1 ...

  3. leetcode 46. 全排列 思考分析

    目录 1.题目 2.思考 3.优化 1.题目 给定一个 没有重复 数字的序列,返回其所有可能的全排列. 2.思考 老规矩,先画出给出的例子的解空间树: 观察我们可以发现: 1.深度向下一层深入时,出现 ...

  4. LeetCode 46.全排列

    题目描述: 给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], ...

  5. vector容器删除元素的几种简单方法(详细实用)

    一.直接删除法 (1)使用 vector库函数"erase"删除,使用erase函数后容器size自动-1 int removeElement(vector<int>& ...

  6. LeetCode 46——全排列

    1. 题目 2. 解答 给定一个序列,序列中的任意一个数字都可以作为全排列的最后一位.然后,其余位置元素的确定便是剩余元素的一个全排列,也就是一个子问题. 例子中 [1, 2, 3] 的全排列,最后一 ...

  7. leetcode 46 全排列

    难度:中等 频次:119 题目: 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 .你可以 按任意顺序 返回答案. 解题思路:回溯遍历 class Solution {public ...

  8. leetcode —— 46. 全排列(递归+回溯)

    给定一个 没有重复 数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2 ...

  9. leetcode — 46. 全排列(不含重复数字)

    给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 .你可以 按任意顺序 返回答案. 示例 1: 输入:nums = [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3 ...

最新文章

  1. 世界最优秀的分布式文件系统架构演进之路
  2. ShardingSphere(七) 读写分离配置,实现分库读写操作
  3. 微信小程序UI------实现携程首页顶部的界面(弹性布局)
  4. css3:border-radius圆角边框详解 (变圆 图片)
  5. 因未交赎金,世界航天巨头机密文档遭勒索软件公开
  6. 西南科技大学计算机专业宿舍条件怎么样,西南科技大学宿舍条件,宿舍环境图片(10篇)...
  7. Python+OpenCV:高动态范围(High Dynamic Range, HDR)
  8. python signature函数-tensorflow2.0的函数签名与图结构(推荐)
  9. 《数字摄影与摄像》学习笔记——摄影课理论基础
  10. mysql查询连续次数_Mysql如何查询连续的时间次数
  11. APP抓包之fiddler使用介绍
  12. MATLAB APP Designer设计之图片处理
  13. java 判断用户名_java判断用户名和密码的方法
  14. 【PR】调整音频的声音从大到小
  15. 打开 codeblocks 出现 ntvdm.exe 停止工作
  16. 代码整洁之道要点(一)
  17. 值得收藏 |140+页文章推荐系统系列文章汇总
  18. java数组释放空间函数_D4java基础(语句,函数,数组)
  19. 溢信IP guard文档备份
  20. sqlserver字符串截取

热门文章

  1. 如何在PHP中实现链式方法调用
  2. jQuery formValidator 表单校验插件4.1.1高仿网易邮箱注册页面(已发演示链接)
  3. Davinci DM6446 Codec Engine双核通信环境的搭建
  4. Docker-Compose快速部署开源网盘系统Tank蓝眼网盘系统
  5. 数据库软件架构,到底要设计些什么?
  6. Docker部署安装MongoDB
  7. C、C++和C#区别概述
  8. C#LeetCode刷题之#389-找不同(Find the Difference)
  9. JavaScript ES2019的新增功能
  10. 浅层学习与深层学习_深层副本与浅层副本-以及如何在Swift中使用它们