博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
46. Permutations
阅读量:6420 次
发布时间:2019-06-23

本文共 2453 字,大约阅读时间需要 8 分钟。

题目描述:

Given a collection of distinct integers, return all possible permutations.

Example:

Input: [1,2,3]Output:[  [1,2,3],  [1,3,2],  [2,1,3],  [2,3,1],  [3,1,2],  [3,2,1]]

解题思路:

用回溯法。使用额外空间记录每个数值是否已经使用。

代码:

1 class Solution { 2 public: 3     vector
> permute(vector
& nums) { 4 int size = nums.size(); 5 vector
flag(size, 0); 6 vector
> ret; 7 vector
tmp; 8 tmp.reserve(size); 9 permute(size, flag, tmp, ret);10 for (int i = 0; i < ret.size(); i++) {11 for (int j = 0; j < size; j++) {12 ret[i][j] = nums[ret[i][j]];13 }14 }15 return ret;16 }17 void permute(int size, vector
& flag, vector
& tmp, vector
>& ret) {18 if (accumulate(flag.begin(), flag.end(), 0) == size) {19 ret.push_back(tmp);20 }21 for (int i = 0; i < size; i++) {22 if (flag[i])23 continue;24 flag[i] = 1;25 tmp.push_back(i);26 permute(size, flag, tmp, ret);27 tmp.pop_back();28 flag[i] = 0;29 }30 }31 };
View Code

 改进版本:

1 class Solution { 2 public: 3     vector
> permute(vector
& nums) { 4 int size = nums.size(); 5 vector
flag(size, 0); 6 vector
> ret; 7 vector
tmp; 8 tmp.reserve(size); 9 permute(size, nums, flag, tmp, ret);10 /*for (int i = 0; i < ret.size(); i++) {11 for (int j = 0; j < size; j++) {12 ret[i][j] = nums[ret[i][j]];13 }14 }*/15 return ret;16 }17 void permute(int size, const vector
& nums, vector
& flag, vector
& tmp, vector
>& ret) {18 if (accumulate(flag.begin(), flag.end(), 0) == size) {19 ret.push_back(tmp);20 return;21 }22 for (int i = 0; i < size; i++) {23 if (flag[i])24 continue;25 flag[i] = 1;26 tmp.push_back(nums[i]);27 permute(size, nums, flag, tmp, ret);28 tmp.pop_back();29 flag[i] = 0;30 }31 }32 };
View Code

 

转载于:https://www.cnblogs.com/gsz-/p/9561666.html

你可能感兴趣的文章
ehCache+spring的简单实用
查看>>
纯CSS3代码实现表格奇偶行异色,鼠标悬浮变色
查看>>
这一周吃什么呢?
查看>>
文本聚类
查看>>
spring mvc改造成spring boot
查看>>
【学习/模板】tarjan缩点
查看>>
multiprocessor(下)
查看>>
Pyinstaller打包程序为*.exe
查看>>
MyBatis配置详解
查看>>
css的再深入8(更新中···)
查看>>
安卓新导入工程中gen目录下无R文件解决方法
查看>>
POJ 2245 Addition Chains(算竞进阶习题)
查看>>
时间分割与获取一下阶段时间
查看>>
案例解析|从数据规划、业务分析到管理决策的数据治理方案
查看>>
Laravel Controllers
查看>>
iOS开发-清理缓存功能的实现
查看>>
iOSpush过后返回多级界面
查看>>
[BZOJ1997/HNOI2010]平面图判定
查看>>
tensorflow学习
查看>>
request:通过表单手机客户机数据
查看>>