leetcode題目:224. 基本計算器
剛開始審題不認真,想用以前本科時期學習時用的棧 + 逆波蘭表示式。
其實注意到了上面的幾個注意點就好寫了。
解釋上述三點:
定義兩個棧:
因為棧是先進後出,因此需要倒序遍歷s。
假設當前遍歷到s
的pos
位置,分為如下幾種情況:
遇到數字0~9
,將數字(不一定是個位數)獲取,加入棧stk_num
中。
解釋2.後面解釋。
有了上述思路,可以寫出ac**:
class solution else if (s[j] == '+')else if (s[j+1] == '-')else
}else
}else if (s[j] == '-')else if (s[j+1] == '-')else
}else
}else
}s.push_back(')');
stackstk_op;
stackstk_num;
int n = s.size();
int pos = n - 1;
while (pos != -1)else if (s[pos] == '(')elseelse
stk_num.push(ans);}}
pos --;
}else if (s[pos] == '+' || s[pos] == '-')else
string s_digit = s.substr(index+1, pos-index);
int digit = stoi(s_digit);
stk_num.push(digit);
pos = index;}}
return stk_num.top();
}};
執行用時:20 ms, 在所有 c++ 提交中擊敗了50.04%的使用者記憶體消耗:10.2 mb, 在所有 c++ 提交中擊敗了35.76%的使用者
因此,我們可以正序計算出結果。
class solution else if (s[pos] == '-')else if (s[pos] == '+')else if (s[pos] == '(')else if (s[pos] == ')')else
ret += sign * num;}}
return ret;
}};
執行用時:12 ms, 在所有 c++ 提交中擊敗了71.50%的使用者記憶體消耗:7.8 mb, 在所有 c++ 提交中擊敗了90.08%的使用者
224 基本計算器
實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例 1 輸入 1 1 輸出 2 示例 2 輸入 2 1 2 輸出 3 示例 3 輸入 1 4 5 2 3 6 8 輸出 23 說明 你可以假設所給定的表示式都是有效的。請不要使用內建的...
224 基本計算器
題目描述 實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例 1 輸入 1 1 輸出 2 示例 2 輸入 2 1 2 輸出 3 示例 3 輸入 1 4 5 2 3 6 8 輸出 23 說明 你可以假設所給定的表示式都是有效的。請不要...
224 基本計算器
224.基本計算器 困難 答案整理 加深記憶 便於複習!python eval 函式還沒完全看懂。給你乙個字串表示式 s 請你實現乙個基本計算器來計算並返回它的值。示例 1 輸入 s 1 1 輸出 2 示例 2 輸入 s 2 1 2 輸出 3 示例 3 輸入 s 1 4 5 2 3 6 8 輸出 2...