給出集合 [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 = 3
輸出: "213"
示例 2:
輸入: n = 4, k = 9
輸出: "2314"
思路分析:請先查閱 leetcode 全排列
本演算法採取回溯法進行搜尋,使用乙個變數記錄當前搜尋到的乙個排列,當搜到的位所需要的時候停止搜尋,返回排列結果。
class
solution
}else
useflag[index]
=false
;//重點。標記回未使用
tempres =
string
(tempres,
0, tempres.
size()
-1);
}}}return
false;}
string getpermutation
(int n,
int k)
};
具體實現**
class
solution
;//用於儲存i的階乘
vector
useflag
(n +1,
false);
//標記i是否使用過
string result ="";
k -=1;
//需要減去自身
康托展開和康托逆展開解決第K個排列問題
集合包含了 n!種不同的排列,將這n!種排列從小到大進行排序,某個排列為第k 個,求k時,使用康托展開,已知k求對應的排列時,使用康托逆展開。對於某個排列 a1,a2,a3,an 將其存入陣列s 求它在n!個排列中的位置k,用rli表示ai後面比ai小的數的個數,ri表示ai後面的數的個數,k 1 ...
LeetCode 第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 第K個排列
給出集合 1,2,3,n 其所有元素共有 n 種排列。按大小順序列出所有排列情況,並一一標記,當 n 3 時,所有排列如下 123 132 213 231 312 321 給定 n 和 k,返回第 k 個排列。首先,我們先理解清楚全排列的過程。給定n 3,則123的全排列有 具體先固定住1,對23進...