[刷题] 46 Permutations
要求
- 整型数组,每个元素不相同,返回元素所有排列的可能
示例
- [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的更多相关文章
- 刷题46. Permutations
一.题目说明 题目是46. Permutations,给一组各不相同的数,求其所有的排列组合.难度是Medium 二.我的解答 这个题目,前面遇到过类似的.回溯法(树的深度优先算法),或者根据如下求解 ...
- leetcode刷题-46全排列
题目 给定一个 没有重复 数字的序列,返回其所有可能的全排列. 思路 回溯算法 不断取出字符,对剩余字符进行选择 实现 class Solution: def permute(self, nums: ...
- [刷题]算法竞赛入门经典(第2版) 4-6/UVa508 - Morse Mismatches
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,10 ms) //UVa508 - Morse Mismatches #include< ...
- Leetcode OJ 刷题
Valid Palindrome吐槽一下Leetcode上各种不定义标准的输入输出(只是面试时起码能够问一下输入输出格式...),此篇文章不是详细的题解,是自己刷LeetCode的一个笔记吧,尽管没有 ...
- leetcode刷题指南
转载自:http://blog.csdn.net/lnho2015/article/details/50962989 以下是我个人做题过程中的一些体会: 1. LeetCode的题库越来越大,截止到目 ...
- leetcode 刷题记录(java)-持续更新
最新更新时间 11:22:29 8. String to Integer (atoi) public static int myAtoi(String str) { // 1字符串非空判断 " ...
- 1、学习算法和刷题的框架思维——Go版
前情提示:Go语言学习者.本文参考https://labuladong.gitee.io/algo,代码自己参考抒写,若有不妥之处,感谢指正 关于golang算法文章,为了便于下载和整理,都已开源放在 ...
- leetcode刷题总结一
大四狗找工作,要刷题了,leetcode上面题目比较适合面试算法类题目,也不纯粹为了蒙题,锻炼一下面试类型的思维 Single Number: 有N个数,其中只有一个数出现了一次,其他都是两次,找出那 ...
- 【刷题记录】BZOJ-USACO
接下来要滚去bzoj刷usaco的题目辣=v=在博客记录一下刷题情况,以及存一存代码咯.加油! 1.[bzoj1597][Usaco2008 Mar]土地购买 #include<cstdio&g ...
随机推荐
- 配置redis 4.0.11 集群
配置redis 4.0.11 集群 准备redis 软件和redis配置文件 启动Redis服务 /data/soft/redis/src/redis-check-aof --fix /log/red ...
- Java执行groovy脚本的两种方式
记录Java执行groovy脚本的两种方式,简单粗暴: 一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容:一种是执行groovy脚本: 二者都通过Invocab ...
- electron项目踩坑--A JavaScript error occurred in the main process:document is not defined
前言 记录electron-vue项目开发中遇到的一个错误,运行时报错如图: 控制台报错如下: ReferenceError: document is not defined at Object.&l ...
- 【Azure Developer】使用Java代码启动Azure VM(虚拟机)
问题描述 在使用Java的启动Azure VM的过程中,遇见了com.azure.core.management.exception.ManagementException: Status code ...
- Hangfire在ASP.NET CORE中的简单实现方法
hangfire是执行后台任务的利器,具体请看官网介绍:https://www.hangfire.io/ 新建一个asp.net core mvc 项目 引入nuget包 Hangfire.AspNe ...
- 日志配置文件读取spring boot配置文件中的属性
如果是读取 application.properties 这种spring boot的默认配置文件时 其中 scope固定为context 指明从上下文中获取, name 根据自己的意思给, sou ...
- 【ShardingSphere】ShardingSphere学习(二)-核心概念-SQL
逻辑表 水平拆分的数据库(表)的相同逻辑和数据结构表的总称. 例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order. 真实表 在分片的数 ...
- 百度sitemap.xml
<?xml version="1.0" encoding="UTF-8" ?> <urlset xmlns="http://www. ...
- Python简易远控(单线程版)
1. 技术:管道通信,流文件处理,socket基础 2. Tips: 默认IP:127.0.0.1 默认端口:7676 3. 代码样例: 服务端: #!/usr/bin/env python # en ...
- UVA10943简单递推
题意: 给你两个数字n,k,意思是用k个不大于n的数字组合(相加和)为n一共有多少种方法? 思路: 比较简单的递推题目,d[i][j]表示用了i个数字的和为j一共有多少种情况,则 ...