国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Leetcode[227] Basic Calculator II

chaos_G / 1998人閱讀

摘要:復雜度思路用兩個來分別記錄當前的結果和操作符注意每一次統計當前的的時候,要看一下下一位的操作符。有一種的方法,是表示的是匹配任意的空白符,包括空格,制表符,換行符,中文全角空格等。也可以用更簡單的方法,。

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
Stack

復雜度
O(N), O(N)

思路
用兩個stack來分別記錄當前的結果和操作符(operator), 注意每一次統計當前的operand的時候,要看一下下一位的操作符。如果下一位是high operator("+"或"/"), 就要先把當前的數和操作符都要先push回stack保留數據,如果當前stack不為空且已經有高位運算符在stack的頂部,就先計算一次重新計算當前的數字,再考慮之后的運算。

有一種replace all multiple spaces with one space的方法,是s.replaceAll("s+",""), s 表示的是匹配任意的空白符,包括空格,制表符(Tab),換行符,中文全角空格等。也可以用更簡單的方法,replaceAll(" +", "")。

代碼

public double calculator(String s) {
    // delete multiple spaces
    s = s.trim().replaceAll(" +", "");
    char[] arr = s.toCharArray();
    Stack res = new Stack<>();
    Stack operator = new Stack<>();
    res.push(0.0);
    operator.push("+");
    for(int i = 0; i < arr.length; i ++) {
        double val = 0;
        int j = i;
        while(j < arr.length && Character.isDigit(arr[j])) {
            val *= 10;
            val += arr[j] - "0";
            j ++;
        }
        //
        if(!operator.isEmpty() && isHighOp(operator.peek())) {
            double temp = getValue(res.pop(), val,operator.pop());
            val = temp;
        }
        if(j < arr.length && isHighOp(arr[j])) {
            res.push(val);
            operator.push(arr[j]);
        }
        else {
            double temp = getValue(res.pop(), val, operator.pop());
            res.push(temp);
            if(j < arr.length) operator.push(arr[j]);
        }
        i = j;
    }
    // notice the format;
    DecimalFormal df = new DecimalFormat("#.##");
    return Double.parseDouble(df.format(res.pop()));
}

public boolean isHighOp(Character ch) {
    return ch == "*" || ch == "/";
}

public double getValue(double op1, double op2, Character ch) {
    if(ch == "+") return op1 + op2;
    if(ch == "-") return op1 - op2;
    if(ch == "*") return op1 * op2;
    return op1 / op2;
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/66321.html

相關文章

  • [LeetCode] 227. Basic Calculator II

    Problem 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 sho...

    silvertheo 評論0 收藏0
  • 224. Basic Calculator & 227. Basic Calculator

    摘要:題目鏈接,就是感覺條件有點多簡單點的寫法,把直接用存在里面,就存成,存成題目鏈接這題就是碰到在加減后面怎么處理的問題。用一個來表示之前的,所以碰到現在是乘的時候就,除類似。 224. Basic Calculator 題目鏈接:https://leetcode.com/problems... stack,就是感覺條件有點多 public class Solution { pub...

    _DangJin 評論0 收藏0
  • 227. Basic Calculator II

    摘要:但是乘除就會有問題,要特殊處理。這題只有加減和括號,優先級就是括號里的先計算,所有我們把括號里的內容當做操作的基本單位。遇到遇到和,遇到遇到,彈出再遇到彈出,這里只是把對數字的操作變成了對的操作,去括號的邏輯一樣。 The expression string contains only non-negative integers, +, -, *, / operators and em...

    littlelightss 評論0 收藏0
  • [Leetcode] Basic Calculator 基本計算器

    摘要:難點在于多了括號后如何處理正負號。但是每多一個括號,都要記錄下這個括號所屬的正負號,而每當一個括號結束,我們還要知道出來以后所在的括號所屬的正負號。 Basic Calculator I 最新更新請見: https://yanjia.li/zh/2019/01/... Implement a basic calculator to evaluate a simple express...

    ky0ncheng 評論0 收藏0
  • Leetcode[224] Basic Calculator

    摘要:復雜度思路將字符串先轉換成后綴表達式,再將其出來。 Leetcode[224] Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ),...

    William_Sang 評論0 收藏0

發表評論

0條評論

chaos_G

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<