leetcode Permutation Sequence

来源:互联网 发布:网络利大于弊的提问词 编辑:程序博客网 时间:2024/05/01 05:34

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.

Note: Given n will be between 1 and 9 inclusive

So the most straightforward way is to generate the number one by one. just traverse from tail and get the first smaller element. then swap and sort, you'll get the answer.

however, for large n and k, it will be very slow. so the insight here is that if p = k / (n-1)!, then the first element is arr[p]

public class Solution {    public String getPermutation(int n, int k) {        // Start typing your Java solution below        // DO NOT write main() function        char b[]=new char[n];        for(int i=0;i<n;i++) b[i]=(char)('0'+i+1);//first initialize 12345...        return new String(mutation(b,n,k));            }        public char[] mutation(char b[],int n, int k) {        if(k==1) return b;                int t=1,h=1;        while(k>h&&t<n){            t++;            h*=t;        }        h/=t;        t--;                int m=(k-1)/h;        char a=b[n-t-1];        b[n-t-1]=b[n-t-1+m];//get the first element and swap with the corresponding element        for(int i=n-t-1+m;i>n-t;i--) b[i]=b[i-1];//shift        b[n-t]=a;                return mutation(b,n,k-m*h);        }}


原创粉丝点击