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.
Note: Given n will be between 1 and 9 inclusive.
Idea: The solution is quite clear if we group the example shown in the question like this:
"123"
"132"
"213"
"231"
"312"
"321"
We can observe the first digit is 1->n, and the next digits are the sequence of n-1 (without using the first digit). Algebraically, 1, 2, 3,..., these numbers are the same, they are just some symbols. So the solution is the find the digits one by one from the rest of the symbols not used.
Time: O(n) Space: O(n)
Code:
public class Solution {
public String getPermutation(int n, int k) {
StringBuilder builder=new StringBuilder();
boolean[] used=new boolean[n];
k=k-1;
int numPer=1;
for(int i=1;i<n;i++)
{
numPer=numPer*i;
}
for(int i=0;i<n;i++)
{
int index=k/numPer;
k=k%numPer;
for(int j=0;j<n;j++)
{
if(used[j]==false)
{
if(index==0)
{
used[j]=true;
builder.append(j+1);
break;
}
else
{
index--;
}
}
}
if(i<n-1)
numPer=numPer/(n-1-i);
}
return builder.toString();
}
}
No comments:
Post a Comment