天天看點

LeetCode 60. Permutation Sequence(排列序列)

原題網址:https://leetcode.com/problems/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.

Note: Given n will be between 1 and 9 inclusive.

分析規律:通過排列數的疊代求商和求餘,得到目标數字。

public class Solution {
    public String getPermutation(int n, int k) {
        int f = 1;
        for(int i=1; i<n; i++) f*=i;
        char[] p = new char[n];
        for(int i=0; i<n; i++) p[i] = (char)('1' + i);
        k --;
        for(int i=0; i<n && k>0; i++) {
            char t = p[i+k/f];
            for(int j=i+k/f; j>i; j--) p[j] = p[j-1];
            p[i] = t;
            k %= f;
            f /= (n-1-i);
        }
        return new String(p);
    }
}