LeetCode: Next Permutation & Permutations1,2
Title:
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).
The replacement must be in-place, do not allocate extra memory.
Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1
思路:
联想实际操作,一般都是从最后一位开始分析。就会发现实际上我们需要找的就是从末尾开始,一直保持逆序的位置。比如1,4,3,2中后面的4,3,2都是逆序,因此需要替换1,找到1后面的稍微比它大的数。大致思路就是这样。
class Solution {
public:
void nextPermutation(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int nSize = num.size();
if (nSize <= ) return;
int idx = nSize - ;
// 查找第一个下降的元素
while(--idx >= && num[idx] >= num[idx+]);
if (idx >= )
{
int i = nSize - ;
// 查找第一个比idx所指元素大的元素
while(num[i] <= num[idx])
{
--i;
}
swap(num[i], num[idx]);
// 反转后面所有元素,让它从小到大sorted
reverse(num.begin()+idx+, num.end());
}
else
{
reverse(num.begin(), num.end());
}
}
};
查找可用二分查找,虽然最后的时间都差不多
class Solution {
public:
void swap(int &i, int& j){
i = i+j;
j=i-j;
i=i-j;
}
int find(vector<int> &num, int startIndex, int v){
int l = startIndex;
int h = num.size()-;
while (l <= h){
int m = (l+h)/;
if (num[m] > v){
l = m+;
}else{
h = m-;
}
}
return h;
}
void nextPermutation(vector<int> &num) {
if (num.size() <= )
return ;
int index = num.size()-;
int min;
int l,r;
while ( index > && num[index-] >= num[index]){
index--;
}
//cout<<index<<endl;
if (index == ){
//到头
l = ;
r = num.size()-;
while (l < r){
swap(num[l],num[r]);
l++;
r--;
}
}else{
//从后面的序列中找到比当前的数刚好大得那个数,并交换,然后重新从小到大排序
int temp = find(num,index,num[index-]);
//cout<<"temp: "<<temp<<endl;
swap(num[index-],num[temp]);
//sort(num.begin()+index,num.end());
l = index;
r = num.size()-;
while (l < r){
swap(num[l],num[r]);
l++;
r--;
}
}
}
};
Title:
Given a collection of numbers that might contain duplicates, return all possible unique permutations.
For example,[1,1,2] have the following unique permutations:[1,1,2], [1,2,1], and [2,1,1].
思路,DFS搜索
void internalpermuteUnique(vector<int> &num, int index, vector<int> &perm, vector<vector<int> > &result) {
int size = num.size();
if (size == index) {
result.push_back(perm);
}
else {
for (int i = index; i < size; ++i) {
if ((i > index) && (num[i] == num[index])) {
continue;
}
else {
swap(num[index], num[i]);
}
perm.push_back(num[index]);
internalpermuteUnique(num, index + , perm, result);
perm.pop_back();
swap(num[index], num[i]);
}
//sort(num.begin() + index, num.end());
}
}
vector<vector<int> > permuteUnique(vector<int> &num) {
vector<vector<int> > result;
vector<int> perm;
sort(num.begin(), num.end());
internalpermuteUnique(num, , perm, result);
return result;
}
Title: Permutation Sequence
The set [1,2,3,…,n] contains a total of n! unique permutations.
By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):
"123""132""213""231""312""321"
Given n and k, return the kth permutation sequence.
思路:题目不难,通过演算就可以找到规律,不过要注意下标,是从0开始的。所以最开始要将k--
class Solution{
public:
string getPermutation(int n,int k){
vector<int> v;
string result;
if (k <= )
return result;
if ( n < || n > )
return result;
for (int i = ; i <= n; i++)
v.push_back(i);
k--;
while (n > ){
int c = getFactorial(--n);
int a = k / c;
int b = k % c;
result.push_back(v[a]+'');
v.erase(v.begin()+a);
k = b;
}
result.push_back(v[]+'');
return result;
}
int getFactorial(int k){
if (k == )
return ;
else
return k * getFactorial(k-);
}
};
LeetCode: Next Permutation & Permutations1,2的更多相关文章
- LeetCode:60. Permutation Sequence,n全排列的第k个子列
LeetCode:60. Permutation Sequence,n全排列的第k个子列 : 题目: LeetCode:60. Permutation Sequence 描述: The set [1, ...
- [LeetCode] Palindrome Permutation II 回文全排列之二
Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empt ...
- [LeetCode] Palindrome Permutation 回文全排列
Given a string, determine if a permutation of the string could form a palindrome. For example," ...
- [LeetCode] Next Permutation 下一个排列
Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...
- LeetCode Palindrome Permutation II
原题链接在这里:https://leetcode.com/problems/palindrome-permutation-ii/ 题目: Given a string s, return all th ...
- LeetCode Palindrome Permutation
原题链接在这里:https://leetcode.com/problems/palindrome-permutation/ 题目: Given a string, determine if a per ...
- Java for LeetCode 060 Permutation Sequence
The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...
- [LeetCode] Find Permutation 找全排列
By now, you are given a secret signature consisting of character 'D' and 'I'. 'D' represents a decre ...
- [leetcode]Next Permutation @ Python
原题地址:https://oj.leetcode.com/problems/next-permutation/ 题意: Implement next permutation, which rearra ...
随机推荐
- 【BZOJ】【3524】【POI2014】Couriers
可持久化线段树 裸可持久化线段树,把区间第K大的rank改成num即可……(往儿子走的时候不减少) 苦逼的我……MLE了一次(N*30),RE了一次(N*10)……数组大小不会开…… 最后开成N*20 ...
- BestCoder Round #2
TIANKENG’s restaurant http://acm.hdu.edu.cn/showproblem.php?pid=4883 竟然暴力1.44*10^7 还要*T=100 竟然过了 # ...
- 【WCF--初入江湖】05 WCF异步编程
05 WCF异步编程 一.服务设计最佳实践 在设计之初,是否用异步,应该由客户端来决定,而不应该去考虑服务的调用者调用的方式. 优点:充分利用多核CPU, 改善用户体验 缺点:滥用异步,会影响性能 二 ...
- asp.net mvc4 使用KindEditor文本编辑器
最近做项目要用文本编辑器,编辑器好多种,这里介绍KindEditor在asp.net mvc4中的使用方法. 一.准备工作: 1.下载KindEditor.去官网:http://www.kindsof ...
- linux源代码阅读笔记 free_page_tables()分析
/* 77 * This function frees a continuos block of page tables, as needed 78 * by 'exit()'. As does co ...
- java基础知识回顾之---java String final类普通方法
辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /* * 按照面向对象的思想对字符串进行功能分类. * ...
- struts2 json关于Date日期的解析
在get方法前加上: @JSON(format="yyyy-MM-dd HH:mm:ss")
- Project Euler 90:Cube digit pairs 立方体数字对
Cube digit pairs Each of the six faces on a cube has a different digit (0 to 9) written on it; the s ...
- 深入浅出Mybatis-分页
http://blog.csdn.net/hupanfeng/article/details/9265341 http://blog.csdn.net/isea533/article/details/ ...
- avi 格式详解
http://blog.csdn.net/becomly/article/details/6283004 http://blog.csdn.net/easecom/article/details/45 ...