当前位置: 首页 > news >正文

政府网站建设经验材料范文seo技术是干什么的

政府网站建设经验材料范文,seo技术是干什么的,快速建站软件排名,西安市建设监理协会网站栈模拟dfs前言一、花括号展开II二、栈模拟dfs总结参考资料前言 递归调用,代码非常的简洁。但是可以通过显式栈来模拟栈中的内容,锻炼自己的代码能力,清楚知道栈帧中需要的内容。 一、花括号展开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[k2+k1] = 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的使用append+slice[: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.hrbkazy.com/news/24605.html

相关文章:

  • 内容相同的 网站2022最新引流推广平台
  • 北京建设高端网站西安网络优化哪家好
  • wordpress添加+下载长沙网站优化推广
  • 建设局局长有实权吗贵阳关键词优化平台
  • 网站网页设计设计方案谷歌网页版入口在线
  • 电子商务网站建设课设网站互联网推广是什么
  • 做西班牙语网站日本比分预测最新分析
  • 聊城做网站的地方对网站进行seo优化
  • 淄博做网站多少钱灰色词快速排名方法
  • 最大的做网站公司营销网站建设门户
  • 中国建设银行个人卡信息网站网店推广的作用
  • 做网站卖广告位赚钱吗排名优化系统
  • 网络公司要求做网站工商网监厦门关键词优化seo
  • 怎么描述网站主页做的好网站优化推广平台
  • 外贸b2b平台有哪些平台安卓优化大师下载
  • 电子商务有限公司经营范围有哪些长春做网络优化的公司
  • 如何查看网站抓取频率淘宝店铺怎么推广
  • 做网站如何网站考虑优化汕头seo计费管理
  • 鲅鱼圈做网站网工资页多少钱一个月公司怎么做网站推广
  • 域名对网站排名的影响百度seo培训要多少钱
  • 龙华做棋牌网站建设百度做广告费用
  • 什么是小程序商城网站优化企业排名
  • 做企业商城网站武汉seo搜索引擎
  • 设计新颖的网站建站2023年新闻摘抄十条
  • 网站获取访客qq 原理黑龙江最新疫情
  • 龙岩做网站有那几家网站首页关键词如何优化
  • 20亿做网站广东企业网站seo报价
  • 深圳做网站联系电话百度排名优化软件
  • 做网站好的网络营销推广软件
  • 娱乐网站建设公司排名商丘seo外包