【每日刷题】Day133

【每日刷题】Day133

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 784. 字母大小写全排列 - 力扣(LeetCode)

2. 526. 优美的排列 - 力扣(LeetCode)

3. 646. 最长数对链 - 力扣(LeetCode)

1. 784. 字母大小写全排列 - 力扣(LeetCode)

//思路:暴搜+深搜+回溯

//画出决策树

class Solution {

public:

    vector<string> ans;

    string tmp;

    void dfs(string& s,int i)

    {

        if(i==s.size())

        {

            ans.push_back(tmp);

            return;

        }

        char ch = s[i];

        tmp.push_back(s[i]);

        dfs(s,i+1);

        tmp.pop_back();

        if(ch<'0'||ch>'9')//对于字母字符,进行改变

        {

            char ret = change(ch);

            tmp.push_back(ret);

            dfs(s,i+1);

            tmp.pop_back();

        }

    }

    char change(char ch)

    {

        if(ch>=65&&ch<=90) return ch+32;

        else return ch-32;

    }

    vector<string> letterCasePermutation(string s)

    {

        dfs(s,0);

        return ans;

    }

};

2. 526. 优美的排列 - 力扣(LeetCode)

//思路:暴搜+深搜+回溯

//画出决策树

class Solution {

public:


 

    int ans;

    bool hash[16];

    void dfs(int n, int sub)

    {

        if(sub > n)

        {

            ans++;

            return;

        }

        for(int i = 1;i<=n;i++)

        {

            if(!hash[i]&&(sub%i==0||i%sub==0))

            {

                hash[i] = true;

                dfs(n,sub+1);

                hash[i] = false;

            }

        }

    }

    int countArrangement(int n)

    {

        dfs(n,1);

        return ans;

    }

};

3. 646. 最长数对链 - 力扣(LeetCode)

//思路:动态规划

class Solution {

public:

    class Sort

    {

    public:

        bool operator()(const vector<int>& x,const vector<int>& y)

        {

            return x[0]<y[0];

        }

    };

    int findLongestChain(vector<vector<int>>& pairs)

    {

        sort(pairs.begin(),pairs.end(),Sort());

        int rows = pairs.size(),ans = 0;

        vector<int> dp(rows,1);//单独一个数对也能组成数对链,因此初始全为1

        for(int i = 1;i<rows;i++)

        {

            for(int j = 0;j<=i-1;j++)//寻找 0 ~ i-1 中的最大值

                if(pairs[i][0]>pairs[j][1]) dp[i] = max(dp[i],dp[j]+1);//i 位置跟在最大值的数对链后面,组成新的最长数对链

        }

        for(int i = 0;i<rows;i++) ans = ans>dp[i]?ans:dp[i];//返回所有结果中的最大值

        return ans;

    }

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值