这题需要用到回溯法。
回溯法是在以下情况会用到,算法需要经过多步分解完成,每一步都有若干种可能性,需要再算法体里面加判断,什么时候算法不再执行回溯,有返回,同时还要有对若干种情况的判断,不同的情况执行不同的操作。
在这道题中,回溯方法体里面有记录当前是第几重,当前括号小于能加入的最大重数max时,能调用回溯算法加入一次,同时left++,当前括号数大于后括号时,可以调用回溯算法加入一次后括号,同时right++;每次前操作都会在当前的Str上加’(’,每次后操作都会在当前的Str上加’)’,当最后得到的字符串长度与需要的字符创长度相同是,则将这个字符串添加到List里面,并返回。
func generateParenthesis(n:Int)->[String]{ var list = [String]() var str = "" backTrance(list: &list,str:&str, left: 0, right: 0, max: n) return list } func backTrance(list:inout [String],str : inout String,left :Int,right:Int,max:Int){ if str.count == max * 2{ list.append(str) return } if left < max{ str += "(" backTrance(list: &list, str: &str, left: left+1, right: right, max: max) str.removeLast() } if right < left{ str += ")" backTrance(list: &list, str: &str, left: left, right: right+1, max: max) str.removeLast() } } generateParenthesis(n: 3)
原文地址:https://www.cnblogs.com/duzhaoquan/p/14855060.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。