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

Leetcode刷题笔记题解(C++):224. 基本计算器

思路:

step 1:使用栈辅助处理优先级,默认符号为加号。
step 2:遍历字符串,遇到数字,则将连续的数字字符部分转化为int型数字。
step 3:遇到左括号,则将括号后的部分送入递归,处理子问题;遇到右括号代表已经到了这个子问题的结尾,结束继续遍历字符串,将子问题的加法部分相加为一个数字,返回。
step 4:当遇到符号的时候如果是+,得到的数字正常入栈,如果是-,则将其相反数入栈,如果是*,则将栈中内容弹出与后一个元素相乘再入栈。
step 5:最后将栈中剩余的所有元素,进行一次全部相加。

#include <stack>
#include <vector>
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 返回表达式的值* @param s string字符串 待计算的表达式* @return int整型*/int calculate(string s) {// write code herereturn function(s, 0)[0];}vector<int> function(string s,int index){stack<int>sk;long long num = 0;char op = '+';int i;for(i = index;i<s.size();i++){if(s[i]==' ') continue;//如果当前为数字else if(s[i]>='0'&&s[i]<='9'){num = num*10+s[i]-'0';//防止连续的数字if(i!=s.length()-1&&s[i+1]!=' ') continue;//如果为数字不执行下面的语句继续遍历,并且下一个字符不为空格}else if(s[i]=='('){//遇到左括号,从左括号开始第一个进行递归,并且下一个字符不为空格vector<int> res = function(s, i+1);num = res[0];//计算出括号中的计算值i = res[1];//得出遍历的下标位置if(i!=s.length()-1&&s[i+1]!=' ') continue;//如果还没结束字符串则继续遍历}switch (op) {case '+':sk.push(num);break;case '-':sk.push(0-num);break;case '*':int temp = sk.top();sk.pop();sk.push(temp*num);break;}num = 0;if(s[i] == ')') break;//遇到右括号则递归结束else op = s[i];}int sum = 0;//计算栈中的所有值的和while (!sk.empty()) {sum += sk.top();sk.pop();}return vector<int> {sum,i};}
};

http://www.lryc.cn/news/262745.html

相关文章:

  • 还在为学MyBatis发愁?史上最全,一篇文章带你学习MyBatis
  • C# WPF上位机开发(树形控件在地图软件中的应用)
  • 【华为】文档中命令行约定格式规范(命令行格式规范、命令行行为规范、命令行参数格式、命令行规范)
  • Trie 字典树(c++)(前缀)
  • 全球移动通信(2G/3G/4G/5G)频谱分布情况
  • 【04】GeoScene导出海图或者电子航道图000数据成果
  • 安卓端出现https请求失败(转)
  • appium2.0.1安装完整教程+uiautomator2安装教程
  • Hbase的Rowkey设计
  • 软考机考考试第一批经验分享
  • 架构简洁之道有感,谈谈软件组件聚合的张力
  • 计算机网络 网络层上 | IP数据报,IP地址,ICMP,ARP等
  • 金智融门户(统一身份认证)同步数据至钉钉通讯录
  • 服务器RAID配置及功能介绍
  • vue + element 实现鼠标左右滑动效果
  • gitlab 安装
  • idea中定时+多数据源配置
  • Python---多任务的介绍
  • Kubernetes 的用法和解析 -- 4
  • 【fabrc.js】 操作鼠标自由绘制图形:矩形、圆形、直线等图形【画图功能】
  • WPF 显示PDF、PDF转成图片
  • CODESYS的Robotics_PickAndPlace_without_Depictor例程解释
  • 通过全流量分析Web业务性能好坏
  • 【C语言】自定义类型——枚举、联合体
  • 大模型自定义算子优化方案学习笔记:CUDA算子定义、算子编译、正反向梯度实现
  • 【密码学基础】Diffie-Hellman密钥交换协议
  • 最新AI绘画Midjourney绘画提示词Prompt教程
  • AI助力DevOps新时代
  • Spring之容器:IOC(2)
  • Spring 依赖查找知识点总结