leetcode 60 Permutation Sequence

k/(n-1)!=a...b,如果b为0,则结果为第a-1个数字的最大的一个;如果b不为0,则为第a个数字的第rem个。

class Solution {
public:
    string getPermutation(int n, int k) {
        set<int> s;
        for(int i=1;i<=n;++i) s.insert(i);
        return helper(n,k,s);
    }
    string helper(int n,int k,set<int>& s) {
        if(n==0) return "";
        int sum=1;
        for(int i=1;i<n;++i) sum*=i;
        int div=k/sum,rem=k%sum;
        auto ite=s.begin();
        while(div) {
            ++ite;--div;
        }
        string str;
        if(!rem) {
            --ite;
            str=to_string(*ite);
            s.erase(ite);
            for(auto cite=s.rbegin();cite!=s.rend();++cite) {str+=to_string(*cite);}
            return str;
        }
        str=to_string(*ite);
        s.erase(ite);
        str+=helper(n-1,rem,s);
        return str;
    }
};

 

posted @ 2020-04-13 10:22  qiujiejie  阅读(102)  评论(0编辑  收藏  举报