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,2
3,2,1
→ 1,2,3
1,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 ...
随机推荐
- CentOS安装RockMongo
rockmongo官网下载页面在这里: http://rockmongo.com/downloads 找到最新版本的下载链接,一般第一个就是: 右键复制url,比如说是这个: http://rockm ...
- WPF Loader
xaml <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xml ...
- Unity3D脚本中文系列教程(七)
http://dong2008hong.blog.163.com/blog/static/4696882720140311445677/?suggestedreading&wumii Unit ...
- 独立IP与共享IP的区别
做网站选择独立IP还是共享IP,相信很多站长都在此纠结过,自己不使用服务器的时候从来没有关心过独立IP和共享IP的究竟有什么具体的差别.但当自己真正用到的时候,才发现:同样都是 IP,差别不是一般的大 ...
- springmvc常用注解之@Controller和@RequestMapping
对于各种注解而言,排第一的当然是“@Controller”,表明某类是一个controller. “@RequestMapping”请求路径映射,如果标注在某个controller的类级别上,则表明访 ...
- Zookeeper安装部署
Zookeeper安装 1. 安装 wget http://www.apache.org/dist//zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz ...
- python流程控制语句 ifelse - 2
#! /usr/bin/python x = input('please input a integer:') x = int (x) ): print('你输入了一个负数') else: print ...
- python 有关矩阵行列的存取 np.array
初始化 a = range() a = np.array(a) a = a.reshape(,) a [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 ...
- python小问题记录:
numpy.chararray.flatten chararray.flatten(order='C') Return a copy of the array collapsed into one d ...
- python3.4安装suds
使用suds访问webservice十分方便 python3.x安装suds会报错“No module named client” 在stackoverflow上找到了替代方法,安装suds-jurk ...