題意:
給出集合[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 ...