227. Basic Calculator II

For this problem, we must know the sign just before the num. For example, s = "3+2*2", when we deal with the first 2, we must know '+' is just before it, when we deal with the second 2, we must know '*' is just before it.

According to the sing before the num, we can decide whether push them to the stack directly or pop the stack and then push back.

The solution is as following, the time complexity is O(n)

    public int calculate(String s) {
        s = s.replace(" ", "");
        Stack<Integer> stk = new Stack<>();
        int num = 0;
        int sign = '+';
        for(int i=0;i<s.length();i++){
            char c = s.charAt(i);
            if(Character.isDigit(c)){
                num = num*10+c-'0';
            }
            if(!Character.isDigit(c)||i==s.length()-1){
                if(sign=='+'){
                    stk.push(num);
                }else if(sign=='-')
                    stk.push(-num);
                else if(sign=='*')
                    stk.push(stk.pop()*num);
                else if(sign=='/')
                    stk.push(stk.pop()/num);
                sign = c;
                num=0;
            }
        }
        int res = 0;
        for(int i: stk)
            res+=i;
        return res;
        
    }

 

推荐这些文章:

224. Basic Calculator

这道题跟227题,背下来!
 

class Solution {
public int calculate(String s) {
s=s.replace(" ", "")+'+';
Stack<Integer> stk = new Stack<>();
int sign =1;
int ...

772. Basic Calculator III

 

class Solution {
public int calculate(String s) {
s = s.replace(" ", "")+'+'; //Add a '+' or '-' is necessary, otherwise, the case (1+1) will return 0
Queue<Charact...

基本计算器 II

描述
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
示例 1:
输入:s = "3+2*2"输出:7示例 2:
输入:s = " 3/2 "输出:1示例 3:
输入:s = " 3+5 / 2 "输出:5
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/basic-cal...

227. 基本计算器 II(不考虑括号)

 
难度中等530

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。

 
示例 1:
输入:s = "3+2*2"
输出:7

示例 2:
输入:s = " 3/2 "
输出:1

示例 3:
输入:s = " 3+5 / 2 "
输出:5

1 class Solution {
2 pu...

1209. 删除字符串中的所有相邻重复项 II

给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。
你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。
在执行完所有删除操作后,返回最终得到的字符串。
本题答案保证唯一。
来源:力扣(LeetCode)
链接:https://leetco...

剑指 Offer II 堆

059. 数据流的第 K 大数值
class KthLargest {
public:
priority_queue<int,vector<int>,greater<int>>heap;//小根堆 维护第1大到第k大的数 top就是第k大的数
int k;//太妙了
/*
第n大 n-1 n-2 ... k k-1 k-2 ... 第1大
如果加的数小于...

剑指 Offer II 栈

036. 后缀表达式
class Solution {
Stack<Integer>nums=new Stack<Integer>();
public int evalRPN(String[] tokens) {
for(String x: tokens)
{
char k=x.charAt(0);
...

59. 螺旋矩阵II

模拟
class Solution {
public int[][] generateMatrix(int n) {

/**
* 定义上下左右边界,每次循环一圈后都要缩小边界
* 从1开始赋值
*/
int[][] arr = new int[n][n];
int top = 0;
...

LeetCode227 基本计算器II

题目
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
示例 1:
输入:s = "3+2*2"
输出:7

示例 2:
输入:s = " 3/2 "
输出:1

示例 3:
输入:s = " 3+5 / 2 "
输出:5

提示:
1 <= s.length <= 3 * 10⁵
s 由整数和算符 ('+', '...

剑指 Offer II 110. 所有路径

dfs水题

class Solution {
public:
vector<vector<int>> ret;
vector<int> rute;

int cnt = 0;
void dfs(vector<vector<int>>& graph, int u, int t)
{
...

文章标题:227. Basic Calculator II
文章链接:https://www.dianjilingqu.com/51027.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。
THE END
< <上一篇
下一篇>>