Wayfair
  • OA
    • Karat
      • 811. Subdomain Visit Count
      • Ads Conversion Rate
      • Recommend Movie
      • Longest Common Continuous Subarray
      • Course Overlap
      • Halfway courses
      • Find one rectangle
      • Find all rectangles
      • Find Multiple Shapes
      • word wrap
      • word processor
      • Basic Calculator
      • Basic Calculator with parenthesis
      • 带变量计算器
      • Valid Matrix
      • nonogram
      • Node with 0 or 1 parents
      • 两个节点是否有公共祖先
      • 最远祖先
      • invalid Badge Records
      • 一小时内access多次
      • canSchedule
      • spareTime
      • sparse vector
      • sparse vector 实现add,dot和cos
      • userlogs earliest and latest access time
      • resource Access with in 5 min
      • Find Word Path in Grid
      • Find legal moves
      • 找能去的所有0区域
      • 最短路径找treasure
  • VO
    • Coding
      • Valid Palindrome
      • Add String
      • Coupon
    • System design
    • BQ
    • OOD
  • SD
  • LeetCode Tag
  • VO Onsite
Powered by GitBook
On this page
  1. OA
  2. Karat

Basic Calculator with parenthesis

Leetcode 224 加上parenthesis, 例如"2+((8+2)+(3-999))",返回计算结果。

class Solution {
    public int calculate(String s) {
        Deque<Character> queue = new LinkedList<>();
        for(int i = 0; i< s.length(); i++)
        {
            if(s.charAt(i) != ' ')
            {
                queue.addLast(s.charAt(i));
            }
        }
        return helper(queue);
    }
    
    public int helper(Deque<Character> queue)
    {
        Deque<Integer> stack = new LinkedList<>();
        int num = 0;
        char preSign = '+';
        while(queue.size() > 0)
        {
            char current = queue.removeFirst();
            
            if(isNumber(current))
            {
                num = num * 10 + (current - '0');
            }
            if(current == '(')
            {
                num = helper(queue);
            }
            if(!isNumber(current) || queue.size() == 0)
            {
                switch(preSign)
                {
                    case '+': stack.push(num); break;
                    case '-': stack.push(-num); break;
                }
                preSign = current;
                num = 0;
            }
            if(current == ')') break;
        }
        
        int res = 0;
        while(stack.size() > 0)
        {
            res += stack.removeLast();
        }
        return res;
        
    }
    
    public boolean isNumber(char c)
    {
        return c >= '0' && c <= '9';
    }
}

PreviousBasic CalculatorNext带变量计算器

Last updated 3 years ago