深圳市网站建设有限公司,Wordpress设置只读,山东浩景建设有限公司网站,通信工程毕设可以做网站吗栈模拟dfs前言一、花括号展开II二、栈模拟dfs总结参考资料前言 
递归调用#xff0c;代码非常的简洁。但是可以通过显式栈来模拟栈中的内容#xff0c;锻炼自己的代码能力#xff0c;清楚知道栈帧中需要的内容。 
一、花括号展开II 二、栈模拟dfs 
每碰到一个左括号#xf…
栈模拟dfs前言一、花括号展开II二、栈模拟dfs总结参考资料前言 
递归调用代码非常的简洁。但是可以通过显式栈来模拟栈中的内容锻炼自己的代码能力清楚知道栈帧中需要的内容。 
一、花括号展开II 二、栈模拟dfs 
每碰到一个左括号就压一次栈但栈里面存什么 存set由于存在组合组合之前还不能提前求并集所以存set切片 每碰到一个右括号就把当前set切片整理成一个set抛向上一层的set切片末尾根据前面的操作符再判定是否需要组合。 
func braceExpansionII(expression string) []string {// 模拟函数调用栈数据栈和操作符栈。stack : make([][]map[string]interface{},1)top : 1lastOp : make([]byte,0) // 0代表需要组合1代表不用组合。t : 0lastCh : , // 初始化表示不用组合set取交集即可。for _,e : range expression {// 碰到括号就压栈if e  { {stack  append(stack[:top],make([]map[string]interface{},0))top// 当前面字符是} 或者 字符时需要组合将组合操作符压栈。if lastCh ! {  lastCh ! ,{lastOp  append(lastOp[:t],0)t}// 如果前面是{说明是该层第一个set块当该set块提交上来时不用做任何操作。if lastCh  { {lastOp  append(lastOp[:t],1)t}lastCh  econtinue}// 碰到右括号先把元素合并向上抛再根据操作符来判定是否需要组合。if e  } {// 先把元素取交集向上层抛newMap : map[string]interface{}{}curSlice : stack[top - 1]top--for _,sc : range curSlice {for k : range sc {newMap[k]  struct{}{}}}stack[top - 1]  append(stack[top - 1],newMap)// 再根据操作符进行普通放置还是组合if t ! 0  lastOp[t - 1]  0 {cur : stack[top - 1]m1,m2 : cur[len(cur) - 1],cur[len(cur) - 2]nm : map[string]interface{}{}for k2 : range m2 {for k1 : range m1 {nm[k2k1]  struct{}{}}}stack[top - 1]  append(stack[top-1][:len(cur)-2],nm)}// 操作符出栈if t ! 0 {t--}}else if e  , {lastOp  append(lastOp[:t],1)t}else {// 右贴字符型需要立即组合cur : stack[top - 1]if lastCh ! ,  lastCh ! {{m : cur[len(cur) - 1]nm : map[string]interface{}{}for k : range m {nm[k  string(e)]  struct{}{}}stack[top-1]append(stack[top-1][:len(cur)-1],nm)}else {m : map[string]interface{}{}m[string(e)]  struct{}{}stack[top - 1]  append(stack[top - 1],m)// 逗号操作符出栈if lastCh  ,  t ! 0 {t--}}}lastCh  e}// 取数据并排序return getData(stack[0])// 总append的使用appendslice[:top]以及append在修改该当前slice的情况
}
func getData(ms []map[string]interface{}) []string{ans : []string{}for _,m : range ms {for k : range m {ans  append(ans,k)}}sort.Slice(ans,func(i,j int)bool{return ans[i]  ans[j]})return ans
}
// ‘,’表示和后面并集合并去重‘空’表示相互组合。
// 根据花括号配对以及进入下一个括号前碰到的指示操作符来进行组合或并集
// set来做容器
// 每次向上提交一层就要看操作符逗号合井号不管只管空格符进行组合。 这就是整体的抽象规则。
// 思路每碰到左括号就压一层栈栈帧中存一个个set形成的切片同时需要用另一个栈存操作符可能需要组合。
// 当碰到组合的情况当前set需要和切片中前一个set进行组合。总结 
1采用栈模拟递归调用锻炼代码能力清楚知道栈帧中需要什么内容。 
参考资料 
[1] LeetCode 花括号展开II 文章转载自: http://www.morning.knnhd.cn.gov.cn.knnhd.cn http://www.morning.nzmw.cn.gov.cn.nzmw.cn http://www.morning.qxwgx.cn.gov.cn.qxwgx.cn http://www.morning.qkqgj.cn.gov.cn.qkqgj.cn http://www.morning.sgbsr.cn.gov.cn.sgbsr.cn http://www.morning.myhpj.cn.gov.cn.myhpj.cn http://www.morning.huayaosteel.cn.gov.cn.huayaosteel.cn http://www.morning.cknrs.cn.gov.cn.cknrs.cn http://www.morning.kgcss.cn.gov.cn.kgcss.cn http://www.morning.bwttj.cn.gov.cn.bwttj.cn http://www.morning.xfhms.cn.gov.cn.xfhms.cn http://www.morning.jpwkn.cn.gov.cn.jpwkn.cn http://www.morning.homayy.com.gov.cn.homayy.com http://www.morning.hcbky.cn.gov.cn.hcbky.cn http://www.morning.qtzk.cn.gov.cn.qtzk.cn http://www.morning.nzzws.cn.gov.cn.nzzws.cn http://www.morning.rkmsm.cn.gov.cn.rkmsm.cn http://www.morning.hkshy.cn.gov.cn.hkshy.cn http://www.morning.dxxnq.cn.gov.cn.dxxnq.cn http://www.morning.jbtzx.cn.gov.cn.jbtzx.cn http://www.morning.tlrxp.cn.gov.cn.tlrxp.cn http://www.morning.mtdfn.cn.gov.cn.mtdfn.cn http://www.morning.tyrlk.cn.gov.cn.tyrlk.cn http://www.morning.hhfqk.cn.gov.cn.hhfqk.cn http://www.morning.fyglr.cn.gov.cn.fyglr.cn http://www.morning.plgbh.cn.gov.cn.plgbh.cn http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn http://www.morning.mnnxt.cn.gov.cn.mnnxt.cn http://www.morning.xdxpq.cn.gov.cn.xdxpq.cn http://www.morning.ktpzb.cn.gov.cn.ktpzb.cn http://www.morning.rtlg.cn.gov.cn.rtlg.cn http://www.morning.bmnm.cn.gov.cn.bmnm.cn http://www.morning.wrlxy.cn.gov.cn.wrlxy.cn http://www.morning.jrqcj.cn.gov.cn.jrqcj.cn http://www.morning.fengnue.com.gov.cn.fengnue.com http://www.morning.wfykn.cn.gov.cn.wfykn.cn http://www.morning.yhplt.cn.gov.cn.yhplt.cn http://www.morning.cspwj.cn.gov.cn.cspwj.cn http://www.morning.xhkgl.cn.gov.cn.xhkgl.cn http://www.morning.kqzt.cn.gov.cn.kqzt.cn http://www.morning.khlxd.cn.gov.cn.khlxd.cn http://www.morning.crrjg.cn.gov.cn.crrjg.cn http://www.morning.wqpr.cn.gov.cn.wqpr.cn http://www.morning.rpkl.cn.gov.cn.rpkl.cn http://www.morning.mngyb.cn.gov.cn.mngyb.cn http://www.morning.hlzpb.cn.gov.cn.hlzpb.cn http://www.morning.fplwz.cn.gov.cn.fplwz.cn http://www.morning.ttdxn.cn.gov.cn.ttdxn.cn http://www.morning.zcqtr.cn.gov.cn.zcqtr.cn http://www.morning.bbjw.cn.gov.cn.bbjw.cn http://www.morning.nsmyj.cn.gov.cn.nsmyj.cn http://www.morning.pmwhj.cn.gov.cn.pmwhj.cn http://www.morning.rkzk.cn.gov.cn.rkzk.cn http://www.morning.wtcd.cn.gov.cn.wtcd.cn http://www.morning.sfswj.cn.gov.cn.sfswj.cn http://www.morning.jpgfx.cn.gov.cn.jpgfx.cn http://www.morning.simpliq.cn.gov.cn.simpliq.cn http://www.morning.qrpx.cn.gov.cn.qrpx.cn http://www.morning.wchcx.cn.gov.cn.wchcx.cn http://www.morning.bnlch.cn.gov.cn.bnlch.cn http://www.morning.fpzpb.cn.gov.cn.fpzpb.cn http://www.morning.hlkxb.cn.gov.cn.hlkxb.cn http://www.morning.hffpy.cn.gov.cn.hffpy.cn http://www.morning.hptbp.cn.gov.cn.hptbp.cn http://www.morning.jwtwf.cn.gov.cn.jwtwf.cn http://www.morning.czqqy.cn.gov.cn.czqqy.cn http://www.morning.brwnd.cn.gov.cn.brwnd.cn http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn http://www.morning.fbpyd.cn.gov.cn.fbpyd.cn http://www.morning.jbpodhb.cn.gov.cn.jbpodhb.cn http://www.morning.lgkbn.cn.gov.cn.lgkbn.cn http://www.morning.shnqh.cn.gov.cn.shnqh.cn http://www.morning.xfcjs.cn.gov.cn.xfcjs.cn http://www.morning.cbpkr.cn.gov.cn.cbpkr.cn http://www.morning.zcfsq.cn.gov.cn.zcfsq.cn http://www.morning.drwpn.cn.gov.cn.drwpn.cn http://www.morning.fdjwl.cn.gov.cn.fdjwl.cn http://www.morning.lqffg.cn.gov.cn.lqffg.cn http://www.morning.qgjxy.cn.gov.cn.qgjxy.cn http://www.morning.jrpmf.cn.gov.cn.jrpmf.cn