leetcode: Permutation Sequence

找到n的全排列按大小排列的第k个序列....实际上n有n!个全排列,每个首位有(n-1)!种情况,因而根据其与k的大小关系可以确定首位....类似,我们可以利用余数和(n-1)!的大小关系确定第二位.....

这里我们需要维护一个数组来记录每个数的使用情况....每次从小到大选择第“商”个没选的数为该位...

另外,第k个数实际上是从0开始排的k-1个数,所以要先k--

public class Solution {
    public String getPermutation(int n, int k) {
        int []data = new int[10];
        boolean []isUse = new boolean[10];
        String res = "";
        data[0]=1;
        for(int i=1;i<=9;i++)
        {
            data[i] = i*data[i-1];
        }
        k--;
        for(int j=n;j>=1;j--)
        {
            int tmp = k/data[j-1];
            k = k%data[j-1];
            int i=1;
            for( i=1;i<n;i++)
            {
                if(isUse[i]==false)
                {
                    tmp--;
                }
                if(tmp<0)
                {
                    break;
                }
            }
            res += i;
            isUse[i] = true;
        }
        return res;
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值