当前位置: 首页 > 科技观察

LeetCode括号生成(Top100)

时间:2023-03-13 19:14:07 科技观察

前言本题是LeetCode的前100个高频题。我们社区会继续介绍谷一(NetflixGrowthHacker,《iOS 面试之道》作者,ACE专业健身教练。微博:@古谣道长[1])Swift算法解法整理成文字版,方便大家学习并阅读。到目前为止,我们已经更新了21期的LeetCode算法。我们会保持更新时间和进度(周一、周三、周五上午9:00发布)。每期内容不多。希望大家在上班的路上读一读,积累久了会有很大的提升。不积步,无以至万里;不积小流,则不成江海。Swift社区将陪伴您一路前行。如果您有建议和意见,请在文末留言,我们将尽力满足您的需求。难度等级:中等1.描述数字n代表生成括号的对数。请设计一个函数,可以生成所有可能且有效的括号组合。2.示例示例1输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2输入:n=1输出:["()"]约束:1<=n<=83.AnswerclassGenerateParentheses{funcgenerateParenthesis(_n:Int)->[String]{guardn>0else{return[String]()}varpaths=[String](),path=""dfs(&paths,path,n,n)returnpaths}privatefuncdfs(_paths:inout[String],_path:String,_leftRemaining:Int,_rightRemaining:Int){ifrightRemaining==0{paths.append(path)return}ifleftRemaining>0{dfs(&paths,path+"(",leftRemaining-1,rightRemaining)}ifrightRemaining>leftRemaining{dfs(&paths,path+")",leftRemaining,rightRemaining-1)}}}主要思想:DummyNode遍历两个列表,比较两个节点并指向右边的节点。时间复杂度:O(2^n)空间复杂度:O(n)本算法解法库:LeetCode-Swift[2]点击进入LeetCode[3]实践参考资料[1]@古谣道长:https://m.weibo.cn/u/1827884772[2]LeetCode-Swift:https://github.com/soapyigu/LeetCode-Swift[3]LeetCode:https://leetcode.com/problems/generate-括号/