Leetcode解题笔记,basic calculator 1&&basic calculator 2
2015-08-06 23:46
351 查看
Basic Calculator1
题目内容:实现一个带有加减以及括号功能的小计算器,其中输入的没用负数,而且输入的内容也全部是合法表达式。
个人分析:
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中不同,将计算结果全部放入栈中最后再进行加和计算
相关文章推荐
- 使用CXF开发web service 的服务器端(三)
- 差分方程建模
- cocos2dx 关于lua 绑定的环境配置官方文档翻译与 将自定义c++方法绑定到lua的的方法
- Unity常用插件
- 一次循环实现数组的排序
- 关于linux下很多eclipse快捷键 失效的 问题
- Codeforces Gym 100342C Problem C. Painting Cottages 转化题意
- Android Studio 第一次新建Android Gradle项目超级慢的解决方案
- uva 10720 Graph Construction(贪心)
- Linux 常用符号总结
- CF_229D_Towers
- Eclipse搭建maven开发环境
- 分散/聚集 I/O(scatter-gather I/O)
- 16、2015.08.03第十七节课 C#1(.net和C#的关系、VS与.net的对应关系、VS2012常用的几种应用程序、C#定义一个类的方法、类页面内容的解释、定义Person的类、调用Person类的方法、命名规范、数值类型)
- 解决升级XCode后插件失效的方法
- .net中如何实现多线程
- 第一百二十六天 how can I 坚持
- java的native关键字
- 关于C语言数组利用指针排序的问题
- 移动开发 网络流量精简攻略