寒假刷题打卡第二十六 | 回溯

返校已经好几天了。果然还是在学校刷题的效率高。

  1. 给你一个整数数组 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;
    }
};
  1. 含有相同元素求子集
    为什么不对呢?
    为什么下面这个条件始终都不成立呢
    已解决。
(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;
    }
};
  1. 给定一个字符串 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;
    }
  1. 数独皇后看题目都怂,把动态规划做了再来吧。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值