我首先用vector进行保存,全部便利一遍,结果TLE了,不过遍历代码还是有参考价值的。
class Solution {
public:
vector<string> result;
void search(int index,int max,int* A)
{
if(index==max)
{
string s;
s = "";
for(int i =1;i<=max ;i++)
s+=(char)(A[i]+'0');//string如何加一个char字符
result.push_back(s);
return;
}
for(int i = index;i<=max;i++)
{
swap(A[i],A[index]);
search(index+1,max,A);
swap(A[i],A[index]);
}
}
string getPermutation(int n, int k) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
result.clear();
int*A = new int[n+1];
for(int i = 1;i<=n;i++)
A[i] = i;
search(1,n,A);
sort(result.begin(),result.end());//如何对vector进行排序
return result[k-1];
}
};
最后参考如何按从小到大遍历直到k为止
class Solution {
private:
string result;
int A[10];
public:
bool search(int index,int n,int&k,bool* used)
{
if(index==n+1)
{
k--;
if(k==0)
{
result = "";
for(int i =1;i<=n;i++)
result+=(char)(A[i]+'0');
return true;
}
return false;
}
for(int i =1;i<=n;i++)
{
if(used[i]==false)
{
A[index] = i;
used[i] = true;
if(search(index+1,n,k,used))return true;
used[i] =false;
}
}
}
string getPermutation(int n, int k) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
bool* used = new bool[n+1];
if(k==0) return "";
for(int i =1;i<=n;i++)
used[i]=false;
result ="";
search(1,n,k,used);
delete[] used;
return result;
}
};