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):


  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "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的更多相关文章

  1. LeetCode:60. Permutation Sequence,n全排列的第k个子列

    LeetCode:60. Permutation Sequence,n全排列的第k个子列 : 题目: LeetCode:60. Permutation Sequence 描述: The set [1, ...

  2. [LeetCode] Palindrome Permutation II 回文全排列之二

    Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empt ...

  3. [LeetCode] Palindrome Permutation 回文全排列

    Given a string, determine if a permutation of the string could form a palindrome. For example," ...

  4. [LeetCode] Next Permutation 下一个排列

    Implement next permutation, which rearranges numbers into the lexicographically next greater permuta ...

  5. LeetCode Palindrome Permutation II

    原题链接在这里:https://leetcode.com/problems/palindrome-permutation-ii/ 题目: Given a string s, return all th ...

  6. LeetCode Palindrome Permutation

    原题链接在这里:https://leetcode.com/problems/palindrome-permutation/ 题目: Given a string, determine if a per ...

  7. 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 ...

  8. [LeetCode] Find Permutation 找全排列

    By now, you are given a secret signature consisting of character 'D' and 'I'. 'D' represents a decre ...

  9. [leetcode]Next Permutation @ Python

    原题地址:https://oj.leetcode.com/problems/next-permutation/ 题意: Implement next permutation, which rearra ...

随机推荐

  1. 【tarjan】BZOJ 1051:受欢迎的牛

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3134  Solved: 1642[Submit][Sta ...

  2. POJ 3292

    Semi-prime H-numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7059   Accepted: 3 ...

  3. JSP include标签和include指令

    test1.jsp <% int a = 5; out.println(a); %> test2.jsp <jsp:include page="/test1.jsp&quo ...

  4. Project Euler 99:Largest exponential 最大的幂

    Largest exponential Comparing two numbers written in index form like 211 and 37 is not difficult, as ...

  5. ssm框架整合小结

    1.整合思路 一.Dao层:整合mybatis和spring 需要的jar包: 1.mybatis的jar包 2.Mysql数据库驱动 3.数据库连接池 4.Mybatis和spring的整合包. 5 ...

  6. redhat 7.2 配置yum源

    http://blog.csdn.net/wylfengyujiancheng/article/details/50418930

  7. 8、SpringMVC源码分析(3):分析ModelAndView的形成过程

    首先,我们还是从DispatcherServlet.doDispatch(HttpServletRequest request, HttpServletResponse response) throw ...

  8. Hibernate HQL查询的参数绑定

    参数绑定: Hibernate中对动态查询参数绑定提供了丰富的支持,那么什么是查询参数动态绑定呢?其实如果我们熟悉传统JDBC编程的话,我们就不难理解查询参数动态绑定,如下代码传统JDBC的参数绑定: ...

  9. Could not write to output file 'c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\xx'

    1.清了C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files 2.给上述文件夹EveryOne和IIS_Use ...

  10. navigationbar的一些设置记录

    1.设置navigationbar背景颜色 [[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]]; PS:如果颜色不对 ...