【每日刷题】Day133
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. 784. 字母大小写全排列 - 力扣(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;
}
};