题目描述1

笔者分析1.1
没有想到这题也能用递归吧,自我感觉没必要,应该还有更好的办法,但没有想到的是这题递归效率这么高。
class Solution {
private List<String> res;
public List<String> generateParenthesis(int n) {
int leftBracket=n,rightBracket=n;
this.res=new ArrayList<>();
dfs(leftBracket,rightBracket,new StringBuilder());
return res;
}
private void dfs(int leftBracket,int rightBracket,StringBuilder sb){
if(leftBracket==0&&rightBracket==0){
res.add(sb.toString());
return ;
}
if(leftBracket>rightBracket){
return ;
}
if(leftBracket>0){
sb.append("(");
dfs(leftBracket-1,rightBracket,sb);
sb.deleteCharAt(sb.length()-1);
}
if(rightBracket>0){
sb.append(")");
dfs(leftBracket,rightBracket-1,sb);
sb.deleteCharAt(sb.length()-1);
}
}
}
题目描述2

笔者分析2.1
这题真的是越想越复杂啊,也正因为这样,看到评论区那简洁的代码便佩服的五体投地,下面这个思路真是绝了,统计一个字符串内字符出现的顺序和每个时刻的数量来确定一个单词,真是绝。当然如果一个字符串里的字符不是两两不同的话,这个方法就失效了。
class Solution {
public int minNumberOfFrogs(String croakOfFrogs) {
int res=0;
int c=0,k=0,r=0,a=0,o=0;
for(int i=0;i<croakOfFrogs.length();i++){
if(croakOfFrogs.charAt(i)=='c')c++;
else if(croakOfFrogs.charAt(i)=='r')r++;
else if(croakOfFrogs.charAt(i)=='o')o++;
else if(croakOfFrogs.charAt(i)=='a')a++;
else if(croakOfFrogs.charAt(i)=='k')k++;
res=Math.max(c-k,res);
if(c>=r&&r>=o&&o>=a&&a>=k)
continue;
else
return -1;
}
if(c==a&&a==o&&o==k&&r==c)
return res;
else return -1;
}
}
总结
每日十题打卡第二十八天,以下图为证

这篇博客探讨了两个编程问题的解决方法。第一个问题涉及使用递归生成括号组合,作者惊讶于递归在该问题上的高效性。第二个问题是一个字符串解析挑战,通过跟踪字符顺序和数量来确定单词,提出了一种简洁而巧妙的解决方案。文章总结了这两个问题的思路,并展示了如何在复杂性中找到简单解。
368

被折叠的 条评论
为什么被折叠?



