国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

字符串應(yīng)用之全排列

2019-11-11 04:53:44
字體:
供稿:網(wǎng)友

之前在leetcode做過全排列的題目,LeetCode46和LeetCode47分別是不帶重復(fù)元素和帶重復(fù)元素的全排列,當(dāng)時圖個簡單,直接用STL的next_permutation去做了,這一次把遞歸算法學(xué)習(xí)了一遍。

不重復(fù)元素的全排列

對于1234….n這樣的全排列,他的全排列有n!種,因此求解該問題的時間復(fù)雜度為n!。其實(shí)要求全排列,無非就是對元素進(jìn)行交換,使他們出現(xiàn)在不同的位置。

代碼

class Solution { PRivate: void func(vector<vector<int>>&res,vector<int>&nums,int n) { if(n==nums.size()-1) { res.push_back(nums); return; } for(int i=n;i<nums.size();++i) { swap(nums[i],nums[n]); func(res,nums,n+1); swap(nums[i],nums[n]); } }public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>>res; func(res,nums,0); return res; }};

重復(fù)元素的全排列

由于我們是迭代的交換元素,當(dāng)?shù)侥硞€元素時,如果前面出現(xiàn)過一樣的元素,那么就無需再做這次交換了。

代碼

class Solution { #if 1 bool dup(vector<int>&nums,int n,int t) { for(int j=n;j<t;++j) { if(nums[j]==nums[t]) return true; } return false; } #endif void func(vector<vector<int>>&res,vector<int>&nums,int n) { if(n==nums.size()-1) { res.push_back(nums); return; } for(int i=n;i<nums.size();++i) { if(dup(nums,n,i)) { continue; } swap(nums[i],nums[n]); func(res,nums,n+1); swap(nums[i],nums[n]); } }public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>>res; func(res,nums,0); return res; }};

降低時間復(fù)雜度

由于迭代的判斷是否重復(fù)會增加時間復(fù)雜度,我們可以用一個set保存出現(xiàn)過的元素,空間換時間。

class Solution { #if 0 bool dup(vector<int>&nums,int n,int t) { for(int j=n;j<t;++j) { if(nums[j]==nums[t]) return true; } return false; } #endif void func(vector<vector<int>>&res,vector<int>&nums,int n) { if(n==nums.size()-1) { res.push_back(nums); return; } // visit.clear(); // unordered_map<int,int>dup; unordered_set<int>dup; for(int i=n;i<nums.size();++i) { if(dup.find(nums[i])!=dup.end()) continue; dup.insert(nums[i]); /* if(dup(nums,n,i)) { continue; } */ swap(nums[i],nums[n]); func(res,nums,n+1); swap(nums[i],nums[n]); } }public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>>res; func(res,nums,0); return res; }};
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 余姚市| 玉龙| 长子县| 淮安市| 莱州市| 资阳市| 铅山县| 通渭县| 方城县| 临猗县| 洪雅县| 攀枝花市| 略阳县| 威海市| 临海市| 琼中| 礼泉县| 马边| 安龙县| 德化县| 顺义区| 德阳市| 石棉县| 安溪县| 兖州市| 西平县| 新邵县| 鄂伦春自治旗| 山东省| 大新县| 宣化县| 平江县| 本溪市| 岐山县| 特克斯县| 政和县| 富宁县| 浮山县| 永福县| 通化县| 安丘市|