生成排列的三種方法

2021-08-15 18:44:09 字數 1125 閱讀 6226

leetcode.permutations

1. 遞迴,若初始陣列有序,則生成的排列字典序有序

class solution 

private:

vector

> res;

vector

vec,vis;

int n;

void f(vector

&vis, vector

&nums)

for(int i=0; iif(vis[i]) continue;

vec.push_back(nums[i]);

vis[i] = 1;

f(vis, nums);

vis[i] = 0;

vec.pop_back();}}

};

2.利用stl中的next_permutation,若初始陣列有序,則生成的排列有序。

class solution ;

while(next_permutation(nums.begin(), nums.end()))

res.push_back(nums);

return res;

}};

3.利用組合數學第五版56頁的方法:

迴圈執行以下步驟:

(1)找到最大的可移動整數m,若不存在,則退出

(2)交換m與它指向的與它相鄰的數

(3)改變所有大於m的數的方向。

class solution ;

while(1)

if(index == -1) break;

for(int i=0;iif(nums[i]>nums[index]) d[i]=-d[i];

swap(nums[index], nums[index+d[index]]);

swap(d[index], d[index+d[index]]);

//for(auto k : nums) cout << k << " " ;

//cout << endl;

res.push_back(nums);

}return res;

}};

生成1 n的排列的三種方法

include include const int maxn 10 bool used maxn 1 int n,a maxn 1 void search int i for int j 1 j n j void print permutation int n,int a,int cur 用 a傳a...

生成隨機數的三種方法

1.math類的靜態方法random double math.random 0 1 之間的double型數 2.random r new random r.nextdouble 在 0 1 之間的double型數 r.nextfloat 在 0 1 之間的float型數 r.nextint 在int...

三種方法 2020 11 23

利用連線類,例項化得到連線物件 連線類 連線物件 new 連線類 cmd.executescalar cmd.excutereader 關注其中一條資料 物件名.read 獲取關注列所對應的值 console.writeline 物件名 name while 物件名.read 功能,聚焦下一行資料。...