題目鏈結
【題解】
逆康托展開。
考慮康托展開的過程。
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 ...