要求

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

示例

  • [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. C++并发与多线程学习笔记--互斥量、用法、死锁概念

    互斥量(mutex)的基本概念 互斥量的用法 lock(), unlock() std::lock_guard类模板 死锁 死锁演示 死锁的一般解决方案 std::lock()函数模板 std::lo ...

  2. 【观隅】数据集管理与可视化平台-NABCD分析

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-初次邂逅,需求分析 项目介绍 观隅 数据集管理与可视化平台(取"观一隅而知全局" ...

  3. Leedcode算法专题训练(字符串)

    4. 两个字符串包含的字符是否完全相同 242. Valid Anagram (Easy) Leetcode / 力扣 可以用 HashMap 来映射字符与出现次数,然后比较两个字符串出现的字符数量是 ...

  4. Linux下屏幕亮度的调节

    1 概述 Linux下的屏幕调节可以通过图形界面或者命令行进行调节,图形界面的话主要就是在设置中进行调节,如果设置中没有相应的选项可以进行手动调节. 2 手动调节 2.1 手动屏幕调节 亮度由ACPI ...

  5. LAMP架构上线动态网站WordPress

    第一步,一键安装LAMP架构所需要的程序 yum install -y httpd mariadb-server php php-mysql 第二步,配置httpd,修改主配置文件/etc/httpd ...

  6. 简单的了解下Java设计模式:迭代器模式(转载)

    迭代器模式定义 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. Java 开发过程中遍历是常用的.如下边程序: for(int i =0 ; ...

  7. JDBC_07_SQL注入问题 (登录和注册)

    SQL注入问题 导致SQL注入的根本原因是什么? 用户输入的信息中含有sql语句的关键字,并且用户所输入的信息参与了sql语句的编译过程,导致sql语句的原意被扭曲. 模拟用户登陆注册,演示sql注入 ...

  8. 二. 简单初步认识SpringCloud

    (一)微服务的实现方式很多,但是最火的莫过于Spring Cloud了.为什么? 后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大. 技术强:Spring作为Java领域 ...

  9. 【Java】 Java中的浅拷贝和深拷贝

    先抛出结论: 浅拷贝是引用拷贝,A对象拷贝B以后,A对象和B对象指向同一块内存地址,改变A对象的属性值会触发B对象属性的改变,有安全风险 深拷贝是对象拷贝,A对象拷贝B以后,A对象和B对象指向不同的额 ...

  10. 缓冲区溢出分析第10课:Winamp缓冲区溢出研究

    前言 Winamp是一款非常经典的音乐播放软件,它于上世纪九十年代后期问世.与现在音乐播放软件行业百家争鸣的情况不同,当时可以说Winamp就是听音乐的唯一选择了,相信那个时代的电脑玩家是深有体会的. ...