leetcode-全排列(permutation)
来源:互联网 发布:tornado和nginx 编辑:程序博客网 时间:2024/05/21 23:31
给定一个数字列表,返回其所有可能的排列。
class Solution {public: /** * @param nums: A list of integers. * @return: A list of permutations. */ vector<vector<int> > permute(vector<int> nums) { // write your code here int len = nums.size(); vector<vector<int> > res; if (len == 0) { res.push_back(nums); return res; } sort(nums.begin(), nums.end()); permutation(res, nums, len-1); return res; } void permutation(vector<vector<int>>& res, vector<int>& nums, int n) { if (n == 0) { res.push_back(nums); return; } for (int i = 0; i <= n; i++) { swap(nums[i], nums[n]); permutation(res, nums, n - 1); swap(nums[i], nums[n]); } }};
非递归版本
// version 1: Non-Recursionclass Solution {public: /** * @param nums: A list of integers. * @return: A list of permutations. */ vector<vector<int> > permute(vector<int> nums) { vector<vector<int> > permutations; if (nums.size() == 0) { permutations.push_back(vector<int>()); return permutations; } int n = nums.size(); vector<int> stack; bool inStack[n]; for (int i = 0; i < n; i++) { inStack[i] = false; } stack.push_back(-1); while (stack.size() != 0) { // pop the last int last = stack[stack.size() - 1]; stack.pop_back(); if (last != -1) { inStack[last] = false; } // increase the last, find the next bigger & avaiable number int next = -1; for (int i = last + 1; i < n; i++) { if (inStack[i] == false) { next = i; break; } } if (next == -1) { continue; } // generate the next permutation stack.push_back(next); inStack[next] = true; for (int i = 0; i < n; i++) { if (!inStack[i]) { stack.push_back(i); inStack[i] = true; } } // generate real permutation from index vector<int> permutation; for (int i = 0; i < n; i++) { permutation.push_back(nums[stack[i]]); } permutations.push_back(permutation); } return permutations; }};
0 0
- leetcode-全排列(permutation)
- leetcode之全排列(Permutation)
- [LeetCode]Permutation全排列和去重全排列
- LeetCode | Permutation Sequence(找到全排列中的第k个排列)
- 字符全排列Permutation
- 全排列permutation
- Permutation全排列算法
- [LeetCode]—Next Permutation (全排列字典序)
- Leetcode #31. Next Permutation 下一个全排列 解题报告
- leetcode 60. Permutation Sequence 第K个全排列
- LeetCode | Next Permutation(下一个排列)
- LeetCode 31 Next Permutation(下一个排列)
- LeetCode 266. Palindrome Permutation(对称排列)
- LeetCode 31. Next Permutation(下一个排列)
- LeetCode 60. Permutation Sequence(排列序列)
- LeetCode 31 Next Permutation (下一个排列)
- [LeetCode]Permutation I排列
- LeetCode(Permutation Sequence)输出全排列中第k个排列
- Centos7 使用官方YUM源安装Mysql
- (22):优先考虑静态成员类
- 隐藏tomcat黑窗口
- 使用Blat发邮件
- C语言实现顺序表增删查改操作
- leetcode-全排列(permutation)
- 二分查找的递归和非递归实现
- 安卓activity与task
- spring知识点(个人记录)
- redigo代码分析-特殊字符
- PCA原理分析
- elasticSearch 时间类型
- sky3888 Register And Play Free The Wish Master Slot Game(ibet, malaysia online casino, sky3888 regi)
- OSGI企业应用开发(一)OSGI简介