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 标签通常成对出现…