LeetCode 60 第k個排列

2021-09-29 22:38:52 字數 494 閱讀 2648

題目鏈結

【題解】

逆康托展開。

考慮康托展開的過程。

k = ∑v[i]*(n-i)!

其中v[i]表示在a[i+1..n]中比a[i]小的數字的個數

(也即未出現的數字中它排名第幾(從0開始))

那麼我們在逆康托展開的時候,就可以通過直接除(n-i)!得到每個數字的v[i]的值。

然後通過給已經出現的數字打tag。

剩下的問題就轉化為找未出現的第v[i]個數字了。

注意康托展開的值是比當前序列小的序列的個數。

所以如果要找序號為k的序列的話,實際上應該找k-1對應的逆康托序列

【**】

class solution }}

k=k%fac[n-i];

}string s ="";

for (int i = 1;i <= n;i++)

return s;

}};

LeetCode60 第k個排列

給出集合 1,2,3,n 其所有元素共有 n 種排列。按大小順序列出所有排列情況,並一一標記,當 n 3 時,所有排列如下 123 132 213 231 312 321 給定 n 和 k,返回第 k 個排列。說明 示例 1 輸入 n 3,k 3輸出 213 示例 2 輸入 n 4,k 9輸出 23...

leetcode 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 ...

LeetCode 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 ...