没有想到这题也能用递归吧,自我感觉没必要,应该还有更好的办法,但没有想到的是这题递归效率这么高。
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); } } }这题真的是越想越复杂啊,也正因为这样,看到评论区那简洁的代码便佩服的五体投地,下面这个思路真是绝了,统计一个字符串内字符出现的顺序和每个时刻的数量来确定一个单词,真是绝。当然如果一个字符串里的字符不是两两不同的话,这个方法就失效了。
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; } }每日十题打卡第二十八天,以下图为证