码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【打卡】牛客网:BM49 表达式求值(调试很久)


    资料:

    1. vector的字符串中,size()和length()是一样的。length()只是用来获取字符串的长度。

    length()、size()、sizeof()三者的区别_vector用size还是length_我是一只蘑菇17的博客-CSDN博客

    2. swicth-case里,定义新的变量的方法:

    在case后加上作用域符号{}即可解决。

    switch-case内不能定义变量?-CSDN博客  

    模板的:

    • 遍历一遍,变成所有数求和。最后求和。
    • +号后面的数,直接放
    • -号后面的数,取相反数放
    • *号则将当前数和最后放进去的数相乘,再放
    • 遇到(),递归。
      1. #include
      2. class Solution {
      3. public:
      4. /**
      5. * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
      6. *
      7. * 返回表达式的值
      8. * @param s string字符串 待计算的表达式
      9. * @return int整型
      10. */
      11. // 返回vector 而不是int
      12. vector<int> fun(string s, int start) {
      13. char temp_op = '+';
      14. int temp_num = 0;
      15. stack<int> res; //存储最后的、用来求和的结果
      16. int i = start;
      17. for (; i < s.size(); i++) {
      18. //1.预处理操作(处理数字、处理带括号的递归)
      19. //如果当前s[i]是数字
      20. if (isdigit(s[i])) {
      21. temp_num = temp_num * 10 + s[i] - '0';
      22. if (i != s.size() - 1)
      23. //如果后面还有东西,continue,不能进行下面的操作
      24. //如果没有这个if-continue语句,那么temp_num会在后面被“归零”
      25. continue; //粗心,写成break了
      26. }
      27. //如果当前s[i]是'('
      28. if (s[i] == '(') {
      29. vector<int> kuohao = fun(s, i + 1);
      30. // 不需要push,因为'('前已经push了,此时temp_num是归零状态
      31. // res.push(kuohao[0]);
      32. temp_num = kuohao[0]; //粗心忘了
      33. i = kuohao[1];
      34. if (i != s.size() - 1)
      35. continue;
      36. }
      37. //2.处理当前的操作(把数字放入最终的列表)
      38. //如果当前s[i]是其他操作符,根据temp_op,把temp_num放入res
      39. switch (temp_op) {
      40. case '+':
      41. res.push(temp_num);
      42. break;
      43. case '-':
      44. res.push(-temp_num);
      45. break;
      46. case '*':
      47. temp_num *= res.top();
      48. res.pop();
      49. res.push(temp_num);
      50. break;
      51. }
      52. // 3. 归零系列操作
      53. // 相当于全局变量,所以在push了temp_num后,下一次for循环前,要“归零”
      54. temp_num = 0;
      55. if (s[i] == ')')
      56. break; // break需要中断整个for循环,直接结束,所以放在switch外面。
      57. else
      58. temp_op = s[i];
      59. }
      60. // 最后,求和
      61. int res_total = 0;
      62. int res_size = res.size();
      63. // 注意,不能for循环里面用size,因为res在每个循环后的size是变化的。for (int j = 0; j < res.size(); j++) {
      64. for (int j = 0; j < res_size; j++) {
      65. res_total += res.top();
      66. res.pop();
      67. }
      68. return vector<int> {res_total, i};
      69. }
      70. int solve(string s) {
      71. // write code here
      72. return fun(s, 0)[0];
      73. }
      74. };

  • 相关阅读:
    如何计算多分组交互pp值
    VSCode任务tasks.json中的问题匹配器problemMatcher的问题匹配模式ProblemPattern详解
    面试:线程池核心线程如何保持一直运行的
    【python-AI篇】人工智能技能树思维导图
    国庆活动征文 | 庆国庆,作几首打油诗在此
    【AUTOSAR】【以太网】SomeIpXf
    Python课程设计-图书管理系统
    mac安装mongoDB详细步骤 非常简单 五分钟结束~~~
    BurpSuit官方实验室之信息泄露
    《高考择校择专业:权衡与抉择的智慧》
  • 原文地址:https://blog.csdn.net/weixin_47173826/article/details/134362278
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号