LeetCode 224. Basic Calculator
来源:互联网 发布:php查找字符串位置 编辑:程序博客网 时间:2024/06/05 07:16
224. Basic Calculator
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open (
and closing parentheses )
, the plus +
or minus sign -
, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
"1 + 1" = 2" 2-1 + 2 " = 3"(1+(4+5+2)-3)+(6+8)" = 23
Note: Do not use the eval
built-in library function.
【题目大意】
非常简单,看了例子就懂
【思路】
1.对于此题我的想法是将所有整型依其前面的操作符来取正负 然后压栈,最后统一出栈后累加 即得所求
2.我们必须设置一个字符变量sign来记录整型前的操作符,sign初始为+(本题不会出现负数参数)
3.但是由于此题有括号的问题,所以必须先将括号里的值计算出来后再压栈,于是我对于括号值计算后的正负问题
采取将操作符也入栈,这样就可以让计算出来的结果马上找到它的正负号
【代码】
public static int calculate(String s) { Stack<String> stack = new Stack<String>(); int result = 0; s = s.trim(); //去除字符串前后所带空格 char c[] = s.toCharArray(); int len = c.length; if(len == 1){ return Integer.parseInt(s); } int num = 0; char sign = '+'; char preSign = '+'; for(int i=0;i<len;i++){ //当读到整型字符时 有可能前面的倍数是两位数以上故要 乘10后再累加if(Character.isDigit(c[i])){ num = num*10 + c[i]-'0'; }else{ //当读到的不是整型时,此时之前读的整型可入栈,若一开始是括号开头则入栈的num是0 也不影响计算 if(sign == '+'){ stack.push(num+""); }else if(sign == '-'){ stack.push(-num+""); } //现在根据所读字符的不同取值采取不同解决方案 if(c[i] == '+'){//1.当读到的是操作符 +,则将sign的值改变 sign = '+';}else if(c[i] == '-'){//2.当读到的是操作符 -,则将sign的值改变sign = '-';}else if(c[i] == '('){//3.当读到的是'('时stack.push(sign+"");//将当前的sign值压栈,为了记录括号里值的正负sign = '+';//并且将其值改为+(默认无负值,则括号里第一个元素一定是正的)stack.push(c[i]+"");//将'('压栈是为了计算括号里的值时方便找到出口}else if(c[i] == ')'){//3.当读到的是')'时,//此时则将左括号之后入栈的元素依次出栈并且记录起累加值 int curResult = 0; String temp = stack.pop(); while(!temp.equals("(") && !stack.isEmpty()){ curResult += Integer.parseInt(temp); temp = stack.pop(); } //此处提出左括号之前压栈的sign值 旨在为当前结果赋上正负号 preSign = stack.pop().charAt(0); if(preSign == '+'){ stack.push(curResult + ""); } if(preSign == '-'){ stack.push(-curResult + ""); } } num = 0; } } //最后以数字结尾的话就会被漏掉 在此处添加判断 if(Character.isDigit(c[len-1])){ if(sign == '+') stack.push(num+""); if(sign == '-') stack.push(-num+""); } //输出结果 if(stack.isEmpty()){ return num; }else{ while(!stack.isEmpty()){ result += Integer.parseInt(stack.pop()); } return result; } }
阅读全文
0 0
- [leetcode] 224.Basic Calculator
- [leetcode] 224. Basic Calculator
- Leetcode-224.Basic Calculator
- [LeetCode]224. Basic Calculator
- leetcode 224. Basic Calculator
- leetcode.224. Basic Calculator
- LeetCode-224.Basic Calculator
- [LeetCode]224. Basic Calculator
- 【leetcode】224. Basic Calculator
- [LeetCode]224. Basic Calculator
- LeetCode 224.Basic Calculator
- LeetCode 224. Basic Calculator
- leetcode 224. Basic Calculator
- 【LeetCode】Basic Calculator && Basic Calculator II
- LeetCode - Basic Calculator & Basic Calculator II
- Leetcode之Basic Calculator & Basic Calculator II
- LeetCode 224. Basic Calculator(基本计算器)
- [leetcode] 224. Basic Calculator 解题报告
- SpringMVC自定义错误页面
- es配置中防止脑裂的配置
- Ubuntu网络配置
- 帮助方法 Array
- memset 、ZeroMemory和 “={0}” 三者区别
- LeetCode 224. Basic Calculator
- leetcode--Missing Number
- 关于环境变量以及CMD
- Android网络请求--动态加载的效果(已封装、可直接使用)
- Java生成SM2证书基于BouncyCastle(cer)
- 配置动态路由:基于RIP v2
- zigbee NWK层API解析
- 递归求字符串中出现最多的字母
- DOS中操作mysql中文显示乱码问题