标签:
题目内容:
实现一个带有加减以及括号功能的小计算器,其中输入的没用负数,而且输入的内容也全部是合法表达式。
个人分析:
1.利用stack解题,将得出的临时结果放入stack中
2.遇到括号的时候将result放入stack中
心得:
1. 对于加减可以直接利用符号进行操作,专门设置一个sign的变量去存这个符号
2.转化字符串中数字固定方法:number = number*10+s.charAt(i)-‘0‘
3. 对于这类需要对中间过程进行记录的可以利用stack来实现,相似的题目有valid pathness(判断合法符号的)
4. 对于符号的控制可以使用pop或者push进行操作。
5. 讲result结果放入栈中应将result结果重新进行赋值result=0;
代码:
public int calculate(String s) {
Stack<Integer> stack = new Stack<Integer>();
int result =0;
int num = 0;
int sign =1;
for(int i=0; i<s.length();i++){
if(Character.isDigit(s.charAt(i))){
num = num*10+s.charAt(i)-‘0‘;
}else if(s.charAt(i)==‘+‘){
result += num*sign;
num =0;
sign =1;
}else if(s.charAt(i)==‘-‘){
result +=num*sign;
num =0;
sign = -1;
}else if(s.charAt(i)==‘(‘){
stack.push(result);
stack.push(sign);
result = 0;
sign =1;
}else if(s.charAt(i)==‘)‘){
result += sign*num;
num =0;
result *= stack.pop();
result += stack.pop();
}
}
if (num !=0 ) result +=sign*num;
return result;
}
Basic calculator2:
1. 与1中不同,将计算结果全部放入栈中最后再进行加和计算
Leetcode解题笔记,basic calculator 1&&basic calculator 2
标签:
原文地址:http://www.cnblogs.com/whaochen/p/4709519.html