第k个排列
题目
给定 n 和 k,求123..n组成的排列中的第 k 个排列。
注意事项
1 ≤ n ≤ 9样例
对于 n = 3, 所有的排列如下:
123
132
213
231
312
321
如果 k = 4, 第4个排列为,231.题解
简单的字典排序。
class Solution {
/**
* @param n: n
* @param k: the kth permutation
* @return: return the k-th permutation
*/
public String getPermutation(int n, int k) {
int[] A = new int[n];
for (int i=1;i<=n;i++)
{
A[i-1] = i;
}
k--;
while (k-- > 0)
{
nextPermutation(A);
}
StringBuilder sb = new StringBuilder();
for (int i=0;i<A.length;i++)
{
sb.append(String.valueOf(A[i]));
}
return sb.toString();
}
public void nextPermutation(int[] nums) {
int n = nums.length;
if (n > 1)
{
for(int i=n-2;i>=0;i--)
{
if (nums[i] < nums[i+1])
{
for (int j=n-1;j>i;j--)
{
if (nums[j] > nums[i])
{
swap(nums,i,j);
reverse(nums,i+1,nums.length-1);
return;
}
}
}
}
}
reverse(nums,0,nums.length-1);
}
private void swap(int[] nums,int i,int j)
{
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
private void reverse(int[] nums,int start,int end)
{
for (int i=start,j=end;i<j;i++,j--)
{
swap(nums,i,j);
}
}
}
Last Update 2016.11.13