网站建设黑客篡改,wordpress国外付费主题下载,自己申请一个网站怎么做,网站地图 seoleetcode 150道题 计划花两个月时候刷完#xff0c;今天#xff08;第四十四天#xff09;完成了2道(88-89)150#xff1a;
88.(22. 括号生成) 题目描述#xff1a;
数字 n 代表生成括号的对数#xff0c;请你设计一个函数#xff0c;用于能够生成所有可能的并且 有效…leetcode 150道题 计划花两个月时候刷完今天第四十四天完成了2道(88-89)150
88.(22. 括号生成) 题目描述
数字 n 代表生成括号的对数请你设计一个函数用于能够生成所有可能的并且 有效的 括号组合。
输入n 3
输出[((())),(()()),(())(),()(()),()()()]第一版没通过我想法是 的全排列然后找出来符合的并且去重。。超时了
class Solution {ListString resnew ArrayList();SetString setnew HashSet();public ListString generateParenthesis(int n) {if(n1){return res;}StringBuilder sbnew StringBuilder();for(int i0;in;i){sb.append(());}boolean[] usednew boolean[n*2];generateCore(sb.toString(),new StringBuilder(),used);return res;}public void generateCore(String str,StringBuilder sb,boolean[] used){if(sb.length()str.length()){ if(check(sb.toString())set.add(sb.toString())){res.add(sb.toString()); }return ;}for(int i0;istr.length();i){if(used[i]){continue;}sb.append(str.charAt(i));used[i]true;generateCore(str,sb,used);used[i]false;sb.deleteCharAt(sb.length()-1);}}public boolean check(String str){StackCharacter stacknew Stack();for(char ch:str.toCharArray()){if(ch(){stack.push(ch);}else{if(stack.isEmpty()){return false;}stack.pop();}}return stack.isEmpty();}
}第二版看了解题
class Solution {ListString resnew ArrayList();public ListString generateParenthesis(int n) {if(n1){return res;}generateCore(new StringBuilder(),n,n);return res;}public void generateCore(StringBuilder sb,int left,int right){//左边和右边剩余的括号数都等于 0 的时候结算。if(left0right0){ res.add(sb.toString());return ;}//产生左分支的时候只看当前是否还有左括号可以使用if(left0){sb.append(();generateCore(sb,left-1,right);sb.deleteCharAt(sb.length()-1);}//产生右分支的时候还受到左分支的限制//右边剩余可以使用的括号数量一定得在严格大于左边剩余的数量的时候if(right0rightleft){sb.append());generateCore(sb,left,right-1);sb.deleteCharAt(sb.length()-1);}}
}89.79. 单词搜索题目描述
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中返回 true 否则返回 false 。
单词必须按照字母顺序通过相邻的单元格内的字母构成其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
输入board [[A,B,C,E],[S,F,C,S],[A,D,E,E]], word ABCCED
输出true第一版没超时但是效率垫底还没来得及看解题。。
class Solution {public boolean exist(char[][] board, String word) {for(int i0;iboard.length;i){for(int j0;jboard[i].length;j){if(board[i][j]word.charAt(0)){boolean[][] usednew boolean[board.length][board[0].length];if(dfs(board,word,i,j,new StringBuilder(),used)){return true;}}}}return false;}public boolean dfs(char[][] board, String word,int mIndex,int nIndex,StringBuilder sb,boolean[][] used) {int mboard.length;int nboard[0].length;if(mIndex0||mIndexm){return false;}if(nIndex0||nIndexn){return false;}if(used[mIndex][nIndex]){return false;}sb.append(board[mIndex][nIndex]);used[mIndex][nIndex]true;if(sb.length()word.length()){sb.deleteCharAt(sb.length()-1);used[mIndex][nIndex]false;return false;}else if(sb.length()word.length()){if(word.equals(sb.toString())){sb.deleteCharAt(sb.length()-1);used[mIndex][nIndex]false;return true;}else{sb.deleteCharAt(sb.length()-1);used[mIndex][nIndex]false;return false;}}else{if(!word.substring(0,sb.length()).equals(sb.toString())){sb.deleteCharAt(sb.length()-1);used[mIndex][nIndex]false;return false;}}boolean flagdfs(board, word, mIndex 1, nIndex, sb, used) ||dfs(board, word, mIndex - 1, nIndex, sb, used) ||dfs(board, word, mIndex, nIndex 1, sb, used) ||dfs(board, word, mIndex, nIndex - 1, sb, used);if(!flag){sb.deleteCharAt(sb.length()-1);used[mIndex][nIndex]false;}return flag;}
}难啊咋这么难这块。。。后面还有动态规划我咋办。。
加油吧早日跳槽