博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] 全排列
阅读量:5167 次
发布时间:2019-06-13

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

递归实现:

class Solution {public:    /**     * @param nums: A list of integers.     * @return: A list of permutations.     */    vector
> permute(vector
nums) { // write your code here vector
> permutations; if (nums.empty()) return permutations; permutate(nums, 0, permutations); return permutations; }private: void permutate(vector
nums, int start, vector
>& permutations) { if (start == nums.size()) { permutations.push_back(nums); return; } for (int i = start; i < (int)nums.size(); i++) { swap(nums[start], nums[i]); permutate(nums, start + 1, permutations); } }};

非递归实现(基于nextPermutation):

1 class Solution { 2 public: 3     /** 4      * @param nums: A list of integers. 5      * @return: A list of permutations. 6      */ 7     vector
> permute(vector
nums) { 8 // write your code here 9 vector
> permutations;10 if (nums.empty()) return permutations;11 vector
copy(nums.begin(), nums.end());12 nextPermutation(nums);13 permutations.push_back(nums);14 while (nums != copy) {15 nextPermutation(nums);16 permutations.push_back(nums);17 }18 return permutations;19 }20 private:21 void nextPermutation(vector
& nums) {22 int k = -1, n = nums.size();23 for (int i = n - 2; i >= 0; i--) {24 if (nums[i] < nums[i + 1]) {25 k = i;26 break;27 }28 }29 if (k == -1) {30 reverse(nums.begin(), nums.end());31 return;32 }33 int l;34 for (int i = n - 1; i > k; i--) {35 if (nums[i] > nums[k]) {36 l = i;37 break;38 }39 }40 swap(nums[l], nums[k]);41 reverse(nums.begin() + k + 1, nums.end());42 }43 };

 

转载于:https://www.cnblogs.com/jcliBlogger/p/4625828.html

你可能感兴趣的文章
虚拟机长时间不关造成的问题
查看>>
面试整理:Python基础
查看>>
Program exited with code **** 相关解释
查看>>
tableView
查看>>
Happy Great BG-卡精度
查看>>
Xamarin Visual Studio不识别JDK路径
查看>>
菜鸟“抄程序”之道
查看>>
Ubuntu下关闭防火墙
查看>>
TCP/IP 邮件的原理
查看>>
原型设计工具
查看>>
windows下的C++ socket服务器(4)
查看>>
css3 2d转换3d转换以及动画的知识点汇总
查看>>
【Java】使用Eclipse进行远程调试,Linux下开启远程调试
查看>>
对Vue为什么不支持IE8的解释之一
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>
ObjectiveC基础教程(第2版)
查看>>
centos 引导盘
查看>>
Notes of Daily Scrum Meeting(12.8)
查看>>
Apriori算法
查看>>