欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > leetcode刷题日记——基本计算器

leetcode刷题日记——基本计算器

2025/4/27 14:15:51 来源:https://blog.csdn.net/qq_46582619/article/details/147531524  浏览:    关键词:leetcode刷题日记——基本计算器

[ 题目描述 ]:
在这里插入图片描述
[ 思路 ]:

  • 由于题目中只有加减运算,而减法运算可以看成加上一个负数
  • 那么我们只要弄清每个数的正负,然后将这些数求和,即可得到正确答案
  • 由题可以看到,负号后紧跟数字,则是负数,负号后跟的若是括号,则需要将括号中的数字的符号全部反转
  • 那么,难点就在于如何判断 - ( -( -() ) ),这种嵌套括号中数字的符号,尤其是 ’ ) ’ 后面的数的符号需要注意
  • 通过栈来实现符号处理问题,初始化栈顶符号为 ’ + ’
    • 当遇见 ’ ( ’ 时,将当前符号压入栈,因为这代表的他这个括号中的符号是否需要反转
    • 当遇见 ’ ( ’ 时,将栈顶符号弹出栈,因为该符号所表示的括号中的数已经处理完了
    • 当遇见 ’ + ’ 时,直接取栈顶符号
    • 当遇见 ’ - ’ 时,取栈顶符号的相反
  • 运行如下
    在这里插入图片描述
int calculate(char* s) {int len=strlen(s);int signs[len], top = 0,sign=1,res = 0,i=0;signs[top++] = sign;while (i < len) {if (s[i] == ' ') {i++;} else if (s[i] == '+') {sign = signs[top - 1];i++;} else if(s[i] == '-') {sign = -signs[top - 1];i++;} else if(s[i] == '(') {signs[top++] = sign;i++;} else if(s[i] == ')') {top--;i++;} else {long num = 0;while (i < len && s[i] >= '0' && s[i] <= '9') {num = num * 10 + s[i] - '0';i++;}res += sign * num;}}return res;
}

[ 官方题解 ]:

  • 方法一:括号展开 + 栈,基本同上

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词