返校已经好几天了。果然还是在学校刷题的效率高。
- 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
这道题比较的难点在于判断写进ans的条件。刚开始怎么想都觉得 不对,最后发现就是没有条件。
class Solution {
public:
void dfs(vector<int>& nums, vector<vector<int>>& ans, vector<int>& set, int idx)
{
ans.push_back(set);
if(idx >= nums.size())
return;
for(int i=idx;i<nums.size();i++)
{
set.push_back(nums[i]);
dfs(nums, ans, set, i+1);
set.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> set;
dfs(nums, ans, set, 0);
return ans;
}
};
- 含有相同元素求子集
为什么不对呢?
为什么下面这个条件始终都不成立呢
已解决。
(idx>0 && nums[idx-1]==nums[idx] && !visited[idx-1])
class Solution {
public:
void dfs(vector<int>& nums, vector<vector<int>>& ans, vector<int>& set, vector<int>& visited, int idx)
{
ans.push_back(set);
if((idx>0 && nums[idx-1]==nums[idx] && !visited[idx-1]))
cout << "?" << endl;
if(idx >= nums.size() || 0)
return;
for(int i=idx;i<nums.size();i++)
{
visited[i] = 1;
set.push_back(nums[i]);
dfs(nums, ans, set, visited, i+1);
set.pop_back();
visited[i] = 0;
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
vector<vector<int>> ans;
vector<int> set;
vector<int> visited(nums.size(), 0);
sort(nums.begin(), nums.end());
dfs(nums, ans, set, visited, 0);
return ans;
}
};
- 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
没有做出来,看的答案。
判断回文代码如下:
bool isPalind(string s)
{
int n = s.length();
for(int i = 0; i < n/2; i++) //只需要判断一半就行了
{
if(s[i] != s[n-1-i])
return false;
}
return true;
}