1. 程式人生 > >Basic Calculator 基本計算器

Basic Calculator 基本計算器

pty src stack () 符號 ron 一個 += 相加

2018-09-27 22:02:36

一、Basic Calculator II

問題描述:

技術分享圖片

問題求解:

sign用來保存前一個符號,用num來記錄數字,如果碰到一個符號或者到達結尾,則需要進行入棧操作,這個時候需要結合符號進行相應的運算。

    public int calculate(String s) {
        if (s == null || s.length() == 0) return 0;
        int res = 0;
        Stack<Integer> stack = new Stack<>();
        char sign = ‘+‘;
        int num = 0;
        for (int i = 0; i < s.length(); i++) {
            if (Character.isDigit(s.charAt(i))) {
                num = num * 10 + s.charAt(i) - ‘0‘;
            }
            if (!Character.isDigit(s.charAt(i)) && s.charAt(i) != ‘ ‘ || i == s.length() - 1) {
                if (sign == ‘/‘) num = stack.pop() / num;
                if (sign == ‘*‘) num = stack.pop() * num;
                if (sign == ‘-‘) num *= -1;
                stack.push(num);
                sign = s.charAt(i);
                num = 0;
            }
        }
        while (!stack.isEmpty()) res += stack.pop();
        return res;
    }

二、Basic Calculator

問題描述:

技術分享圖片

問題求解:

本問題中只包含了+,-和括號,首先如果只有+,-的話連Stack都不需要就可以直接遍歷一遍相加就可以了。

但是如果存在括號的情況,那麽就需要使用到一個Stack來對之前計算到的數字和符號進行保存。

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

Basic Calculator 基本計算器