classSolution{publicList<String>generateParenthesis(int n){List<String> result =newArrayList<>();backtrack(n, result,"",0,0);return result;}privatevoidbacktrack(int n,List<String> result,String path,intopen,int close){if(path.length()== n *2){result.add(path);return;}if(open< n)backtrack(n, result, path +"(",open+1, close);if(close <open)backtrack(n, result, path +")",open, close +1);}}
復雜度分析:
時間復雜度: O( 4 n / √ n 4?/√n 4n/√n)。有效括號組合的數量遵循卡塔蘭數,其漸近復雜度為 4 n / √ n 4?/√n 4n/√n。每個組合需要 O(n) 時間構建,總時間復雜度為 O( 4 n / √ n 4?/√n 4n/√n)。
空間復雜度: O(n)。遞歸調用棧的深度最大為 2n,但主要空間消耗來自結果存儲,結果集大小為卡塔蘭數,空間復雜度為 O( 4 n / √ n 4?/√n 4n/√n)。算法本身的額外空間復雜度為 O(n)。
解題思路:
遍歷起點: 從網格的每個單元格出發,嘗試匹配單詞的第一個字符。
?遞歸搜索: 對當前單元格的四個相鄰方向(上、下、左、右)進行遞歸搜索,確保字符匹配且未被訪問過。
?標記訪問: 在搜索過程中臨時標記已訪問的單元格(如將字符改為特殊符號),并在回溯時恢復原狀。
終止條件: 若完整匹配單詞的所有字符,返回 true;若所有路徑均失敗,返回 false。
Java代碼:
publicclassSolution{publicbooleanexist(char[][] board,String word){int rows = board.length;int cols = board[0].length;for(int i =0; i < rows; i++){for(int j =0; j < cols; j++){if(dfs(board, word, i, j,0)){returntrue;}}}returnfalse;}privatebooleandfs(char[][] board,String word,int i,int j,int index){if(i ==-1|| i == board.length || j ==-1|| j == board[0].length || board[i][j]!= word.charAt(index)){returnfalse;}if(index == word.length()-1)returntrue;char temp = board[i][j];board[i][j]='#';boolean found =dfs(board, word, i +1, j, index +1)||dfs(board, word, i -1, j, index +1)||dfs(board, word, i, j +1, index +1)||dfs(board, word, i, j -1, index +1);board[i][j]= temp;return found;}}
HTML 標簽類型全面介紹
HTML(HyperText Markup Language)是構建 Web 頁面結構的基礎語言。HTML 由不同類型的標簽組成,每種標簽都有特定的用途。本文將全面介紹 HTML 標簽的分類及其用法。 1. HTML 標簽概述
HTML 標簽通常成對出現…