码迷,mamicode.com
首页 > 编程语言 > 详细

swift算法:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

时间:2021-06-06 19:24:53      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:算法   return   括号   end   var   回溯法   不同   ack   parent   

 

 这题需要用到回溯法。

 回溯法是在以下情况会用到,算法需要经过多步分解完成,每一步都有若干种可能性,需要再算法体里面加判断,什么时候算法不再执行回溯,有返回,同时还要有对若干种情况的判断,不同的情况执行不同的操作。

 在这道题中,回溯方法体里面有记录当前是第几重,当前括号小于能加入的最大重数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)

 

swift算法:数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。

标签:算法   return   括号   end   var   回溯法   不同   ack   parent   

原文地址:https://www.cnblogs.com/duzhaoquan/p/14855060.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!