zoukankan      html  css  js  c++  java
  • 信息竞赛进阶指南--递归法求中缀表达式的值,O(n^2)(模板)

    // 递归法求中缀表达式的值,O(n^2)
    int calc(int l, int r) {
    	// 寻找未被任何括号包含的最后一个加减号
    	for (int i = r, j = 0; i >= l; i--) {
    		if (s[i] == '(') j++;
    		if (s[i] == ')') j--;
    		if (j == 0 && s[i] == '+') return calc(l, i - 1) + calc(i + 1, r);
    		if (j == 0 && s[i] == '-') return calc(l, i - 1) - calc(i + 1, r);
    	}
    	// 寻找未被任何括号包含的最后一个乘除号
    	for (int i = r, j = 0; i >= l; i--) {
    		if (s[i] == '(') j++;
    		if (s[i] == ')') j--;
    		if (j == 0 && s[i] == '*') return calc(l, i - 1) * calc(i + 1, r);
    		if (j == 0 && s[i] == '/') return calc(l, i - 1) / calc(i + 1, r);
    	}
    	// 首尾是括号
    	if (s[l] == '('&&s[r] == ')') return calc(l + 1, r - 1);
    	// 是一个数
    	int ans = 0;
    	for (int i = l; i <= r; i++) ans = ans * 10 + s[i] - '0';
    	return ans;
    }
    
  • 相关阅读:
    23.课程应用接口
    22.课程页面设计
    21.手机接口
    20.云通讯
    19.JWT
    18.权限认证
    解决github下载慢的终极方法
    vs code 配置c/c++环境
    Python 字符编码处理总结
    Python编码
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798251.html
Copyright © 2011-2022 走看看