LeetCode 60 n个数的第k个全排列;

思路:

1、int index=k/dp[i];迭代找出它是属于nums数组中的以第几个元素开始的全排列;

k=k%dp[i];是以index为开始的 第k个全排列;



class Solution {
public:
    string getPermutation(int n, int k) 
    {
        string result="";
        if(n<=0||k<=0)
            return result;
        
        vector<int>nums={1,2,3,4,5,6,7,8,9};
        vector<int>dp(n+1,1);
        for(int i=1;i<=n;i++)//求阶乘;
            dp[i]=i*dp[i-1];
        k--;//因为下标从0开始;所以第k个 也就对应第k-1;
        for(int i=n;i>0;i--)
        {
            int index=k/dp[i-1];//求出第一个数字在nums中的下标是几;
             k%=dp[i-1];//更新k的值;迭代一次;
            
            //result+=nums[index]+'0';
            result.push_back('0'+nums[index]);//string也可以通过迭代器访问;感觉跟vector差不多欸;’
            nums.erase(nums.begin()+index);
        }
        
        
        return result;
        
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值