要求

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

示例

  • [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. 2020 OO 第一单元总结 表达式求导

    title: BUAA-OO 第一单元总结 date: 2020-03-19 20:53:41 tags: OO categories: 学习 OO第一单元通过三次递进式的作业让我们实现表达式求导,在 ...

  2. 6. Mybatis resultMap

    resultMap 元素是MyBatis中最重要最强大的元素.它就是让你远离90%的需要从结果集中取出数据的JDBC代码的那东西,而且在一些情形下允许你做一些JDBC不支持的事情.事实上,编写相似于对 ...

  3. 网络编程Netty入门:EventLoopGroup分析

    目录 Netty线程模型 代码示例 NioEventLoopGroup初始化过程 NioEventLoopGroup启动过程 channel的初始化过程 Netty线程模型 Netty实现了React ...

  4. redis实际应用-限流

    为什么要做限流 首先让我们先看一看系统架构设计中,为什么要做"限流". 旅游景点通常都会有最大的接待量,不可能无限制的放游客进入,比如故宫每天只卖八万张票,超过八万的游客,无法买票 ...

  5. Symmetry UVA - 1595

      The figure shown on the left is left-right symmetric as it is possible to fold the sheet of paper ...

  6. 数据结构之栈(JavaScript描述)

    栈数据结构   栈是一种遵从后进先出原则的有序集合.新添加或待删除的元素都保存在栈的同一端,称为栈顶,另一端就叫栈底.在栈内,锌元素都靠近栈顶,救援都接近栈底 类似栈的例子   栈也被用在编程语言你的 ...

  7. 太全了!Redis主从复制原理以及常见问题总结

    相信很多小伙伴都已经配置过主从复制,但是对于redis主从复制的工作流程和常见问题很多都没有深入的了解.这次给大家整理一份redis主从复制的全部知识点. 下方可视频观看,效果更佳 Redis实战精讲 ...

  8. Typora 修改代码块高亮样式

    目录 方法一:下载自己喜欢的样式 方法二:获取Typora自制主题 方法三:自己撰写css样式文件 方法一:下载自己喜欢的样式 Typora的代码块语法高亮使用的是CodeMirror实现的,所以需要 ...

  9. 深度解析Django REST Framework 批量操作

    我们都知道Django rest framework这个库,默认只支持批量查看,不支持批量更新(局部或整体)和批量删除. 下面我们来讨论这个问题,看看如何实现批量更新和删除操作. DRF基本情况 我们 ...

  10. 1. Robot Framework入门

    RF定义: 通用型的 自动测试框架, 绝大部分的软件的的自动化系统都可以采用它. 特点: 测试数据文件(Test Data)对应一个个的测试用例.测试数据文件里面使用的功能小模块叫关键字,由测试库(T ...