题目描述:
给你一个字符串表达式 s,实现一个基本的计算器来计算并返回结果;
整数除法保留整数部分。
提示:
-
- 1 < s.length <=3*10^5;
- s 由整数和算符(‘+’,‘-’,‘*’,‘/’)组成,中间由一些空格隔开
- s 是一个有效的表达式
- 表达式中的所有整数都是非负整数,且在范围[ 0, 2^31-1 ]内
- 题目数据保证答案是一个32-bit整数
示例:
输入:s='3+2*2'
输出:7
输入:s="3/2"
输出:1
综合解法(javascript实现):
var formular_str='5-2*1/2'; //合格的字符串公式 var sign='+'; //初始化上一个操作符 var formular_str_sum=0; //初始化计算结果 var stack_obj=new Stack(); //js模拟栈实现请参考之前文章去除重复字符 for(let index=0;index<formular_str.length;index++){ if(formular_str[index]==''){} else if(['+','-','*','','/'].includes(formlar_str[index])){ sign=formular_str[index]; }else{ if(sign=='-'){ stack_obj.push(-1*Number(formular_str[index])); }else if(sign=='+'){ stack_obj.push(Number(formular_str[index])); }else if(sign=='*'){ let temp=stack_obj.pop()*Number(formular_str[index]); stack_obj.push(temp); }else if(sign=='/'){ let temp=parseInt(stack_obj.pop()/Number(formular_str[index])); stack_obj.push(temp); } } } while(stack_obj.size!=0){ formular_str_sum+=stack_obj.pop(); } console.log(`the forular_str_sm is ${formular_str_sum}`);
总结:
吸收了上一题的精髓之后,遇到这一题相对来说轻松好多,总体上没有大问题;
一步一个脚印!!!继续加油
版权声明:本文为博主原创文章,如需转载,请标明出处。