要求

  • 整型数组,每个元素不相同,返回元素所有排列的可能

示例

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

思路

  • 树形问题,回溯法

实现

  • permute():生成所有排列
  • generatePermutation():生成一个排列
  • nums:向量,输入
  • res:二维向量,保存生成的排列
  • p:向量,找到的一个排列
  • used:向量,记录nums中的第i个元素是否被使用过
  • 32-33:回溯,将p和used恢复原状,进行下一轮循环
 1 #include <vector>
2 #include <iostream>
3 #include <string>
4
5 using namespace std;
6
7 class Solution {
8
9 private:
10 vector<vector<int>> res;
11 vector<bool> used;
12
13 // 生成nums中元素的排列,index--正在处理第几个元素,p--找到的一个排列
14 // p中保存一个有index个元素的排列
15 // 向p末尾添加第index+1个元素,获得一个有index+1个元素的排列
16 void generatePermutation( const vector<int>& nums, int index, vector<int>& p ){
17
18 if( index == nums.size() ){
19 cout<<"p = "<< p[0] << p[1] << p[2] << endl;
20 res.push_back(p);
21 return;
22 }
23
24 for( int i = 0 ; i < nums.size(); i ++ )
25 if( !used[i] ){
26 // 将nums[i]添加在p中
27 p.push_back( nums[i] );
28 used[i] = true;
29 cout<<"nums["<<i<<"] = "<<nums[i]<<endl;
30 generatePermutation(nums, index+1, p);
31 // 状态回溯
32 p.pop_back();
33 used[i] = false;
34 }
35 return;
36 }
37
38 public:
39 vector<vector<int>> permute(vector<int>& nums) {
40
41 res.clear();
42 if( nums.size() == 0 )
43 return res;
44
45 used = vector<bool>(nums.size(), false);
46 vector<int> p;
47 generatePermutation( nums, 0, p);
48
49 return res;
50 }
51 };
52
53 int main(){
54 vector<int> v{1,2,3};
55 vector<vector<int>> res = Solution().permute(v);
56
57 return 0;
58 }

    

相关

  • 47 Permutation II

[刷题] 46 Permutations的更多相关文章

  1. 刷题46. Permutations

    一.题目说明 题目是46. Permutations,给一组各不相同的数,求其所有的排列组合.难度是Medium 二.我的解答 这个题目,前面遇到过类似的.回溯法(树的深度优先算法),或者根据如下求解 ...

  2. leetcode刷题-46全排列

    题目 给定一个 没有重复 数字的序列,返回其所有可能的全排列. 思路 回溯算法 不断取出字符,对剩余字符进行选择 实现 class Solution: def permute(self, nums: ...

  3. [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...

  4. Leetcode OJ 刷题

    Valid Palindrome吐槽一下Leetcode上各种不定义标准的输入输出(只是面试时起码能够问一下输入输出格式...),此篇文章不是详细的题解,是自己刷LeetCode的一个笔记吧,尽管没有 ...

  5. leetcode刷题指南

    转载自:http://blog.csdn.net/lnho2015/article/details/50962989 以下是我个人做题过程中的一些体会: 1. LeetCode的题库越来越大,截止到目 ...

  6. leetcode 刷题记录(java)-持续更新

    最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...

  7. 1、学习算法和刷题的框架思维——Go版

    前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...

  8. leetcode刷题总结一

    大四狗找工作,要刷题了,leetcode上面题目比较适合面试算法类题目,也不纯粹为了蒙题,锻炼一下面试类型的思维 Single Number: 有N个数,其中只有一个数出现了一次,其他都是两次,找出那 ...

  9. 【刷题记录】BZOJ-USACO

    接下来要滚去bzoj刷usaco的题目辣=v=在博客记录一下刷题情况,以及存一存代码咯.加油! 1.[bzoj1597][Usaco2008 Mar]土地购买 #include<cstdio&g ...

随机推荐

  1. Oment++ 初学者教程 第4节-将其转变为真实网络

    4.1两个以上的节点 现在,我们将迈出一大步:创建几个tic模块并将它们连接到网络中.现在,我们将使它们的工作变得简单:一个节点生成一条消息,其他节点继续沿随机方向扔消息,直到它到达预定的目标节点为止 ...

  2. Python3 使用requests请求,解码时出错:'utf8' codec can't decode byte 0x83 in position 1: invalid start byte

    requests请求的响应内容能够通过几个属性获得: response.text 为解码之后的内容,解码会根据响应的HTTP Header中的Content-Type选择字符集.例如 1 " ...

  3. 【2.0 递归 Recursion 01】

    [介绍] Java的一个方法可以调用它自己,Java和所有编程语言都可以支持这种情况,我们把它叫做递归Recursion 递归方法是一种调用自身的方法 那么使用递归方法是是怎么样的呢,让我们看看下面这 ...

  4. jQuery入门看这一篇就够了

    一.选择器 1.基本 名称 用法 描述 #id $("#myDiv"); 根据给定的ID匹配一个元素 element $("div"); 根据给定的元素标签名匹 ...

  5. Spring Boot demo系列(六):HTTPS

    2021.2.24 更新 1 概述 本文演示了如何给Spring Boot应用加上HTTPS的过程. 2 证书 虽然证书能自己生成,使用JDK自带的keytool即可,但是生产环境是不可能使用自己生成 ...

  6. Day05_21_Constructor构造器

    Constructor 构造器 构造方法(构造函数,构造器) 构造方法又被称为 构造函数/构造器/Constructor 构造方法的语法结构: [修饰符列表] 构造方法名 (形式参数列表){ 构造方法 ...

  7. 不一样的角度理解Vue组件

    什么是组件 以Java.C#等面向对象编程语言的角度去理解Vue组件,能够发现组件和面向对象编程的方式和风格很相似.一切事物皆为对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽 ...

  8. Python容器相关操作

    (集合与字典除外)的容器相关操作 (1)容器的拼接 >>> 'abc' + 'def' 'abcdef' (2)容器的重复 >>> (1, 2) * 3 (1, 2 ...

  9. MySQL8安装教程及问题解决

    目录 1.下载MySQL的zip文件,解压,在根目录(bin所在的目录)下创建my.ini文件 2.管理员模式打开命令提示符(shell或者说小黑窗),按以下命令操作. 3.不过......我这里密码 ...

  10. 【cypress】5. 测试本地web应用

    在之前的cypress介绍里曾提到过,cypress虽然也可以测试部署好的应用,但是它最大的能力还是发挥在测试本地应用上. 本章主要内容就是关于如何测试本地web应用的概述: cypress与后台应用 ...