題目:
分析:
還是根據排列組合基本問題全排列 II中給的兩種方法改編。
代碼1(樸素直接修改原來的模板):
int all=-1;
int f(int nums,vector<int> n,int c,int k,vector<int>& v)
{//該往c位置放了
if(c==n.size()-1){
all++;
if(all==k-1) return 1;
return 0;
}
for(int i=1;i<=nums;i++)
{
if(n[i]) continue;
n[i]=1;
v[c]=i;
int kk=f(nums,n,c+1,k,v);
if(kk) return 1;
n[i]=0;
}
return 0;
}
int main()
{
int nums=3;
int k=3;
vector<int> n(nums+1,0);//使用過嗎
vector<int> v(nums,0);//記錄是哪個
f(nums,n,0,k,v);
string ss="";
for(int i=0;i<v.size();i++) ss+=(v[i]+'0');
cout<<ss;
}
結果:超時了!!!o(╥﹏╥)o
不過代碼時沒問題的。
結合數學方法找:
思路是沒必要枚舉出所有的結果。3個數,3!中,這樣從高位到低位逐個定。