问题描述:
The set [1,2,3,…,n]
contains a total ofn! unique permutations.
By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
基本思想:
根据k和n!之间的关系,第k个序列应该在哪些位置提升几个数字。
代码:
//consider if k > n! ? string getPermutation(int n, int k) { //C++ //the first vector<char> base(n,'0'); for(int i = 1; i<=n; i++) base[i-1] = i +'0'; vector<int> multi(n); int temp = 1; multi[0] = 1; for(int i =1; i < n; i++){ temp *= i; multi[i] = temp; } k--; for(int i = 0; i< n-1; i++){ int temp = k/multi[n-i-1]; int pos = i+temp; char c = base[pos]; for(int j =pos-1 ; j>=i; j-- ) base[j+1] = base[j]; base[i] = c; k = k%multi[n-i-1]; } //to String string result = ""; for(int i = 0; i < n; i++) result += (base[i]); return result; }
时间: 2024-10-11 01:53:53