(92)60. 第k个排列(leetcode)

题目链接:
https://leetcode-cn.com/problems/permutation-sequence/
难度:中等
60. 第k个排列
给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
	"123"
	"132"
	"213"
	"231"
	"312"
	"321"
给定 n 和 k,返回第 k 个排列。
说明:
	给定 n 的范围是 [1, 9]。
	给定 k 的范围是[1,  n!]。
示例 1:
	输入: n = 3, k = 3
	输出: "213"
示例 2:
	输入: n = 4, k = 9
	输出: "2314"

特喵的。。。 数学方法 找出计算过程就行 挺简单的 我思路和题解一样 但是写出来的代码天差地别 我的代码不太好理解 题解的过程很清晰 ri啊 还是联系的少

class Solution {
    
    
public:
    vector<int> vec = {
    
     1,1,2,6,24,120,720,5040,40320,362880 };
    string getPermutation(int n, int k) {
    
    
        int curk = k;
        string ans = "";
        vector<string> fla(n);
        for (int i = 0; i < n; ++i) {
    
    
            fla[i] = to_string(i + 1);
        }
        auto it = fla.begin();

        for (int i = 1; i <= n; ++i) {
    
    
            int t = curk / vec[n - i];
            curk = curk % vec[n - i];
            if (!curk) {
    
    
                t--;
            }
            string a = fla[t];
            fla.erase(it + t);
            ans = ans + a;
            if (!curk) {
    
    
                break;
            }
        }
        for (int i = fla.size()-1; i >= 0; --i) {
    
    
            ans += fla[i];
        }
        return ans;
    }
};

这个还清晰一些

class Solution {
    
    
public:
    vector<int> vec = {
    
     1,1,2,6,24,120,720,5040,40320,362880 };
    string getPermutation(int n, int k) {
    
    
        int curk = k-1;
        string ans = "";
        vector<bool> valid(n + 1, true);

        for (int i = 1; i <= n; ++i) {
    
    
            int t = curk / vec[n - i]+1;
            for(int j=1;j<=n;++j){
    
    
                if(valid[j]){
    
    
                    t--;
                    if(!t){
    
    
                        ans+=(j+'0');
                        valid[j]=false;
                        break;
                    }
                }
            }
            curk = curk % vec[n - i];
        }
        return ans;
    }
};

思路自己想出来的 没啥好些写的 就这样吧 该睡了,,,

猜你喜欢

转载自blog.csdn.net/li_qw_er/article/details/108414458