词元无限-ai算法面经
-
项目基本没问,就让我自己讲了讲
-
手撕 — LC 78 数组所有子集
回溯,模版题
在本地写,自定义输入(我本地C++环境坏了,面的时候用的python;下来又力扣上写了一遍)
class Solution { public: vector<vector<int>> res; vector<vector<int>> subsets(vector<int>& nums) { vector<int> path ={}; dfs(nums,0,path); return res; } void dfs(vector<int>& nums,int start,vector<int>& path){ res.push_back(path);//递归树访问该节点的时候存一下当前的路径 for(int i = start;i<nums.size();i++){//同一层(字符数相等) path.push_back(nums[i]); dfs(nums,i+1,path); path.pop_back(); } } }; -
进阶手撕—LC90 有重复元素的子集
其实应该先排序,由于输入是排好序的就没写
class Solution { public: vector<vector<int>> res; vector<vector<int>> subsetsWithDup(vector<int>& nums) { vector<int> path ={}; dfs(nums,0,path); return res; } void dfs(vector<int>& nums,int start,vector<int>& path){ res.push_back(path); for(int i = start;i<nums.size();i++){//同一层(字符数相等) //-------------------new //以这个字符开头的子集全被前面相同字符找过了 if(i>start && nums[i]==nums[i-1]) continue; //-------------------/new path.push_back(nums[i]); dfs(nums,i+1,path); path.pop_back(); } } };