Leetcode 227. Basic Calculator II

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

思路:
關鍵在于怎么處理乘法和除法,如果是乘法或者除法,我們需要用前面的數和當前的數做運算。因此此處可以用棧來記錄前面的數字,用一個符號變量記錄前一個符號,當遍歷到一個新數字時,判斷一下前面的符號是什么,如果是乘除,就和前面的數字運算,如果是+,就向棧中push這個數字,如果是-,就push這個數字的負數。
遍歷到結尾,把最后一個數字入棧,此時棧中存放的都是要進行加法運算的數字。

public int calculate(String s) {
    if (s == null || s.length() == 0) {
        return 0;
    }

    int num = 0, res = 0;
    char op = '+';
    Stack<Integer> stack = new Stack<>();
    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if (Character.isDigit(c)) {
            num = num * 10 + c - '0';
        }
        if (i == s.length() - 1 || (!Character.isDigit(c) && c != ' ')) {
            if (op == '+') {
                stack.push(num);
            } else if (op == '-') {
                stack.push(-num);
            } else if (op == '*') {
                stack.push(stack.pop() * num);
            } else if (op == '/') {
                stack.push(stack.pop() / num);
            }
            op = c;
            num = 0;
        }
    }
    while (!stack.isEmpty()) {
        res += stack.pop();
    }

    return res;
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • FreeCodeCamp - Basic JavaScript 寫在前面: 我曾經在進谷前刷過這一套題,不過當時只...
    付林恒閱讀 16,521評論 5 28
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 受到朋友圈里的小伙伴正能量的影響及堅持不懈的努力所影響,開始發布自己的早安集,希望可以慢慢改變懶癌晚期及拖延癥患者...
    不美千樹閱讀 284評論 0 1
  • 每個人的記憶里都有一個傻子,口齒不清,智力低下,衣衫不整,也許這就是他。他曾經是我們嘲諷的對象,長大后,我們再見此...
    一元亦有用閱讀 9,915評論 1 20