LeetCode No.227 Basic Calculator II
来源:互联网 发布:中央财经大学知乎 编辑:程序博客网 时间:2024/06/07 03:43
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +
, -
, *
, /
operators and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
Some examples:
"3+2*2" = 7" 3/2 " = 1" 3+5 / 2 " = 5
Note: Do not use the eval
built-in library function.
==============================================================
题目链接:https://leetcode.com/problems/basic-calculator-ii/
题目大意:简单计算器,只包含+、-、*、/和括号()。
思路:先对操作符进行优先级判断,根据优先级使用栈对操作符进行操作。
代码适用性:适合+、-、*、/、()、小数
参考代码:
class Solution {public: int calculate(string s) { int n = s.size(); if ( n == 0 ) return 0 ; vector <int> data ;//data vector <char> oprt ;//operator string num = "" ; for ( int i = 0 ; i < n ; i ++ ) { if ( s[i] == '(' ) oprt.push_back ( s[i] ) ; else if ( s[i] == ')' ) { while ( oprt.back() != '(' ) { int b = data.back () ; data.pop_back () ; int a = data.back () ; data.pop_back () ; data.push_back ( cal ( a , b , oprt.back () ) ); oprt.pop_back() ; } oprt.pop_back () ;//pop '(' } else if ( isdigit ( s[i] ) || s[i] == '-' && ( i == 0 || s[i-1] == '(' ) )//case -1 + 2.3 or case 2 * (-2 - 3) { num = "" ; num += s[i] ; while ( i + 1 < s.size() && ( s[i+1] == '.' || isdigit ( s[i+1] ) ) ) { num += s[i+1] ; i ++ ; } data.push_back ( atof ( num.c_str() ) ) ; } else if ( s[i] != ' ' ) { while ( ! oprt.empty() && priority ( oprt.back() ) >= priority ( s[i] ) ) { int b = data.back () ; data.pop_back () ; int a = data.back () ; data.pop_back () ; data.push_back ( cal ( a , b , oprt.back () ) ); oprt.pop_back() ; } oprt.push_back ( s[i] ) ; } } while ( ! oprt.empty() ) { int b = data.back () ; data.pop_back () ; int a = data.back () ; data.pop_back () ; data.push_back ( cal ( a , b , oprt.back () ) ); oprt.pop_back() ; } return data[0] ; }private : int priority ( char ch ) { if ( ch == '(' ) return 0 ; if ( ch == '-' || ch == '+' ) return 1 ; return 2 ; } int cal ( double a , double b , char ch ) { if ( ch == '+' ) return a + b ; else if ( ch == '-' ) return a - b ; else if ( ch == '*' ) return a * b ; return a / b ; }};
0 0
- LeetCode No.227 Basic Calculator II
- leetcode 227 Basic Calculator II
- leetcode 227: Basic Calculator II
- Leetcode 227 Basic Calculator II
- Basic Calculator II - LeetCode 227
- leetcode[227]:Basic Calculator II
- LeetCode(227)Basic Calculator II
- [LeetCode 227] Basic Calculator II
- leetcode 227: Basic Calculator II
- Leetcode 227 Basic Calculator II
- leetcode 227: Basic Calculator II
- LeetCode 227 Basic Calculator II
- LeetCode[227] Basic Calculator II
- LeetCode 227 Basic Calculator II
- Leetcode 227 Basic Calculator II
- [LeetCode] Basic Calculator II
- [leetcode] Basic Calculator II
- leetcode Basic Calculator II
- HTML_16_jquery_动画,事件
- 计算机网络学习
- 96. Unique Binary Search Trees 类别:动态规划 难度:medium
- 怎样将Java文件生成可执行的jar文件(使用Eclipse工具)
- 支持wmv、mpg、mov、avi格式的网页视频播放代码
- LeetCode No.227 Basic Calculator II
- 不翻墙下载Android内核源码
- 简单实现ImageView的加边框颜色的方法
- 自治事务和变异表的行级触发器部分问题
- IP地址,子网掩码,默认网关,路由总结
- 微信JSSDK 突然出现invalid signature无效签名
- Tomcat的使用(详细流程)
- [ATF]ARMv8 psci cpu off api
- 生产者与消费者(一)