60. Kthランキング

ここに画像の説明を挿入
k、タイムアウトで終了する最初の時間

もう一度簡略化して、時間が長すぎます。一見、ソリューションは単純ではありません。

class Solution {
public:
    int flag[10]={0};
    int mapp[10]={0,1,2,6,24,120,720,5040,40320,362880};
    string getPermutation(int n, int k) {
        string ans;
        string tep;
        int row_num=mapp[n]/n;
        int start=k/row_num+(k%row_num==0?0:1);
        k=k-(start-1)*row_num;
        dfs(ans,n,k,tep,start);
        return ans;
    }
    void dfs(string& ans,int n,int& k,string tep,int start){
        if(tep.size()==n){
            k--;
            if(k==0) ans=tep;
            return;
        }
        for(int i=start;i<=n;i++){
            if(flag[i]==0){
                flag[i]=1;
                dfs(ans,n,k,tep+to_string(i),1);
                flag[i]=0;
                if(!ans.empty()) return;
            }
        }
    }   
};

カンター拡張が使用できます

int factorial[10]={1,1,2,6,24,120,720,5040,40320,362880};
    string getPermutation(int n, int k) {
        string ans;
        k--;
        vector<char>num={'1','2','3','4','5','6','7','8','9'};
        for(int i=n;i>=1;i--){
            int a=k/factorial[i-1];
            k=k%factorial[i-1];
            ans.push_back(num[a]);
            num.erase(num.begin()+a);
        }
        return ans;
    }
161のオリジナル記事を公開 68のような 訪問者20,000以上

おすすめ

転載: blog.csdn.net/qq_43179428/article/details/105175120