60 第k個排列

2021-08-19 20:27:41 字數 796 閱讀 7961

給出集合[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

輸出: "2314"

以每個數字開頭的全排列有(n-1)! 種。我們先將1-n這些數存到乙個陣列cc中,然後通過c=(k-1)/(n-1)!確定當前k個數,是以哪乙個數字c+1開頭的,從陣列中取出該數,加到字串裡,並且在陣列中刪掉這個數(因為該數已經用過了,接下來我們只能從剩下的數中取)。

這時已經解決掉了c*(n-1)! 個數,還剩下k-c*(n-1)!個數,作為新的k,繼續用陣列中的數來進行填充,直到把所有的數都填完。

class solution 

string getpermutation(int n, int k)

while(n)

return s;

}};

60 第k個排列

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

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

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