LeetCode 60 第k個排列

2021-10-09 07:28:24 字數 831 閱讀 6168

題意:

給出集合[1,2,3,…,n],其所有元素共有 n! 種排列。

按大小順序列出所有排列情況,並一一標記,當 n = 3 時, 所有排列如下:

"123""132""213""231""312""321"

給定 n 和 k,返回第 k 個排列。

說明:

解題思路:

解題思路有好幾個,但是找規律無疑是耗時最少的,而且占用記憶體會很小

就分析案例1,以1開頭的數字有2個,2開頭的有2個,3開頭的有2個,會發現:

以某個數開頭的數字就是剩餘後面數字的排列,個數為 (n-1)!    【這玩意代表階乘,不是單純的感嘆號】

接下來判斷第k個字串   中每一位的數字 ,num = k / (n-i)!    ,ch[num]  就是當前位置對應的數字          k =  k % (n-i)!

class solution ;

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

k--; // 先減一,陣列從0開始

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

return ans;

}};

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