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

网页pc端广州关键词优化外包

网页pc端,广州关键词优化外包,php做网站有哪些好处,网站开发工具选用原则这道题自己A的,我用的思路比较简单,我们额外定义一个辅助函数isValid,用于判断输入的括号字符是否是闭合的,这个用栈来实现很简单,对应的问题可以参考20.有效的括号,这里不过多描述。我们还需要定义一个递归…


这道题自己A的,我用的思路比较简单,我们额外定义一个辅助函数isValid,用于判断输入的括号字符是否是闭合的,这个用栈来实现很简单,对应的问题可以参考20.有效的括号,这里不过多描述。我们还需要定义一个递归函数进行回溯,我们只需要选择在path末尾添加'('或者')',然后再进入下一层递归即可,当递归结束后,及时将字符串末尾的字符移除。当path的长度达到2 * n时,我们就可以判断当前的path是否为合法结果,调用isValid判断即可,如果合法,就将其加入到result数组中,否则直接返回。但是我这个办法用时太长了,感觉还有可以优化的地方。

class Solution {
public:string path;   vector<string> result;vector<char> brackets = {'(', ')'};//判断括号是否有效bool isValid(string& s){stack<char> st;for(char c : s){if(c == '(') st.push(c);else{if(!st.empty() && st.top() == '(')  //必须要先判断栈是否为空,否则会报错st.pop();else return false;}}return st.empty();}vector<string> generateParenthesis(int n) {backtracking(n);return result;}//回溯函数void backtracking(int n){//递归终止条件if(path.size() == 2 * n){if(isValid(path))   //收集正确结果result.emplace_back(path);return ;}//递归主体for(int i = 0; i < brackets.size(); i++){path += brackets[i];backtracking(n);path.pop_back();}}
};

我看了下灵神的题解,感觉他的思路挺好的,强烈建议看一下他的题解以及配套视频,灵神的思路就是提前定义一个长度为2 * n的字符串,然后用递归函数遍历所有位置,判断每个位置填左括号还是右括号,当处理完所有位置时,就将结果添加到向量中,当然,每个位置上的左右括号并不是任意填的,无论填入左括号还是右括号,都需要满足一定的条件。
假设现在已经填了i个括号,那么下标从0i - 1都已经填过了,我们需要讨论在下标为i的位置上应该填什么括号。假设现在已经填了open个左括号,那么已填的右括号的数量为i - open个。

  1. open < n时,表明当前位置还可以填左括号,因为要填出n对括号,一定是n个左括号和n个右括号,只要左括号的额度还没完,就可以一直填,不需要关注已填的括号是否都闭合。当第i个位置填入左括号时,path[i] = '(';,并递归调用dfs(i + 1, open + 1)
  2. open > i - open时,表明当前位置可以填右括号,在已填的括号中,右括号的数量绝对不能超过左括号,要不然就是非法结果。当第i个位置填入右括号时,path[i] = ')';,并递归调用dfs(i + 1, open)
    用灵神的思路写出来的代码果然速度快了很多,其原因是对枚举结果进行了剪枝,通过加入左右括号的填入限制条件,避免了很多错误的结果,保证触发递归终止条件时,收获的结果一定是合法结果。
class Solution {
public:vector<string> generateParenthesis(int n) {int m = n * 2;   //左括号 + 右括号的总长度vector<string> ans;string path(m, 0);// 目前填了 i 个括号// 这 i 个括号中有 open 个左括号,i-open 个右括号// 就是在此基础上,最多还能再填balance个')'auto dfs = [&](this auto&& dfs, int i, int open) {//递归终止条件if(i == m){   //括号构造完毕,收获结果(结果一定是对的)ans.emplace_back(path);return ;}//递归主体逻辑//枚举当前位置填左括号还是右括号//可以填左括号if(open < n){//填左括号path[i] = '(';dfs(i + 1, open + 1);}//可以填右括号if(i - open < open){//填右括号path[i] = ')';dfs(i + 1, open);}};dfs(0, 0);return ans;}
};
http://www.dtcms.com/a/496911.html

相关文章:

  • 泊头西环网站建设宁德seo
  • 南宁网站设计多少钱一个WordPress自带的博客
  • 模电基础:反馈的基本概念及组态识别
  • 哪个网站可以做汽车评估营销推广策划及渠道
  • 什么网站可以教做面包合肥市城乡建设局网站首页
  • Transformer的核心组成:编码器(Encoder)和解码器(Decoder)
  • 可以做英文教师的网站有趣的个人网站
  • 建设小学瓯江小区网站百度app官方下载
  • 深度解析 mysql 作为向量数据库如何存储和查询向量数据
  • 骑行,安全和自由冲突吗?
  • 长沙商城网站建设报价公示泉州做网站企业
  • 杨和网站开发泰州建筑人才网
  • 边传数据边充电,Type-c 5V OTG应用方案普及讲解
  • 社区自助建站网建网站软件
  • 凡科建站官网页更换视频马鞍山网站建设咨询电
  • 网站收录优化北京网站建设开发公司哪家好
  • 建设网站的建筑公司wordpress更换登录账号
  • MySQL的中继日志(relay-log)的实践
  • 临沂seo网站管理网络营销推广品牌
  • 惠州市建设工程交易中心网站什么是网络营销的核心竞争力
  • 一文精通 Python DDGS 模块:解锁多引擎智能搜索,给大模型添加联网搜索知识库
  • dede网站正在维护中应该怎样设置图片在线制作二维码生成器
  • SAP MM发票校验接口分享
  • 网站建设费经营范围省建设厅网站建筑材料备案申请
  • 红色培训网站源码电视直播网站开发
  • 网站开发费是无形资产吗建晨网站建设有限公司
  • 包装设计网站排行榜莘庄网站建设
  • 网站后端怎么做wordpress为导航添加图标
  • 数据透视表
  • 网页设计第7次作业Apifox的使用