leetcode 60
阿新 • • 發佈:2018-11-15
找規律,通過k的值找到第一位的數,k取餘後相當於n-1的getPermutation,注意k一開始要-1因為k從0開始計數可以保證首數字相同的排列除以一個數的商相等,既可以得到首數字。
string getPermutation(int n, int k) { string res; k--; vector<int> nums; int temp = 1; for(int i=1;i<=n;i++)temp*=i; //求出n的階乘 for(int i=0;i<n;i++)nums.push_back(i+1); for(int i=n;i>0;i--) { temp/=i; //求出首數字相同的排列共有幾個 int pos = k/temp; //找到首數字的大小在所有的數中的位置 k%=temp; //操作k,相當於進行引數是n-1的getPermutation res+=to_string(nums[pos]); nums.erase(nums.begin()+pos); //將已經找到的數erase掉,剩下的數從小到大排序,方便下次找數 } return res; }