答案正确但是超时了。。。看来要通过数学的方式,减少时间复杂度。
class Solution {
public:
vector<int> func(vector<int>& temp,int n,vector<int>& visit,int& k)
{
vector<int> result;
if(temp.size()==n)
{
if(k!=1)
k--;
else
result=temp;
return result;
}
else
{
for(int i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
temp.push_back(i);
vector<int> result=func(temp,n,visit,k);
if(result.size()!=0)
return result;
temp.pop_back();
visit[i]=0;
}
}
return result;
}
}
string getPermutation(int n, int k) {
vector<int> temp;
vector<int> visit(n+1,0);
vector<int> result=func(temp,n,visit,k);
string str;
for(int i=0;i<result.size();i++)
str+=to_string(result[i]);
return str;
}
};
用数学的方式求解,直接得到每一位的数值。
class Solution {
public:
vector<int> func(vector<int>& temp,int n,vector<int>& visit,int& k)
{
vector<int> result;
if(temp.size()==n)
{
if(k!=1)
k--;
else
result=temp;
return result;
}
else
{
for(int i=1;i<=n;i++)
{
if(visit[i]==0)
{
visit[i]=1;
temp.push_back(i);
vector<int> result=func(temp,n,visit,k);
if(result.size()!=0)
return result;
temp.pop_back();
visit[i]=0;
}
}
return result;
}
}
string getPermutation(int n, int k) {
vector<int> multi(10,1);//1-9
for(int i=2;i<=9;i++)
multi[i]=multi[i-1]*i;
vector<int> visit(n+1,0);
string str;
for(int i=1;i<=n;i++)
{
int num;
if(k%multi[n-i]==0)
{
num=k/multi[n-i];
k=multi[n-i];
}
else
{
num=k/multi[n-i]+1;
k=k-(num-1)*multi[n-i];
}
//cout<<num<<" "<<k;
int j=1;
for(j=1;j<=n;j++)
{
if(visit[j]==0)
num--;
if(num==0)
break;
}
visit[j]=1;
str+=to_string(j);
}
return str;
}
};