LeetCode_60 Permutation Sequence

来源:互联网 发布:单片机第二章答案详解 编辑:程序博客网 时间:2024/06/09 20:01

Link to original problem: 这里写链接内容
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):

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

Related problem:
31 Next Permutation: 这里写链接内容
46 Permutations: 这里写链接内容

因为这题只需要返回第k个permutation的结果就行了,所以没必要采取全遍历的算法,求出所有结果,再遍历一次得到第k个String。我们只需计算使用k计算每个位置该出现什么字符即可。具体代码如下:

public class Solution {    public String getPermutation(int n, int k) {        if(n == 1) return "1";        int[] mask = new int[n];        mask[0] = 1;        mask[1] = 1;        for(int ii = 2; ii < n; ii++){            mask[ii] = mask[ii-1]*ii;        }        k--;        boolean[] used = new boolean[n];        char[] res = new char[n];        for(int ii = 0; ii < n; ii++){            int which = k/mask[n-1-ii];            int toWhich = -1;            int index = -1;            while(index < n && toWhich < which){                if(used[++index] == false) toWhich++;            }            res[ii] = (char) (index + '1');            used[index] = true;            k = k%mask[n-1-ii];        }        return new String(res);    }}
0 0
原创粉丝点击