Leetcode 60 第k个排列
题目描述:
题解: 找规律。定义f[i]为从位置i到位置n排列的个数。每一个数字在位置i上出现的次数是固定的,为f[i+1],根据这个规律依次求解每一位上的值。
具体过程如下:
AC代码:
string getPermutation(int n, int k) { string ans = ""; string num = "123456789"; int f[10]; f[n] = 1; int cnt = 2; for(int i=n-1;i>=1;i--) { f[i] = f[i+1]*cnt; cnt++; } int now; int tmp; for(int i=1;i<n;i++) { if(k == 0) { int end = n-i+1; ans+=num[end-1]; num.erase(end-1,1); continue; } now = k/f[i+1]; tmp = k%f[i+1]; if(tmp != 0 ) now++; ans += num[now-1]; num.erase(now-1,1); k = tmp; } ans+=num[0]; return ans; }