[演算法練習及思路-程式設計師面試金典(Java解法)]No85計算器
題號:no85
題目名:計算器
原題URL:https://leetcode-cn.com/problems/calculator-lcci/
題目描述
給定一個包含正整數、加(+)、減(-)、乘(*)、除(/)的算數表示式(括號除外),計算其結果。
表示式僅包含非負整數,+, - ,*,/ 四種運算子和空格 。 整數除法僅保留整數部分。
示例 1:
輸入: "3+2*2"
輸出: 7
示例 2:
輸入: " 3/2 "
輸出: 1
示例 3:
輸入: " 3+5 / 2 "
輸出: 5
限制
- 你可以假設所給定的表示式都是有效的。
- 請不要使用內建的庫函式
eval
。
思路
1.用棧去解決
2.預設前面有個0 + ,如果是數字,就將這個數進行計算
3.如果是運算子,那麼就將這次運算子保留到下次,然後上次的運算子計算這次的結果
4.如果加就直接放進去,減放他的相反數,乘的話先出棧然後和對應的數相乘;如果除也是出棧,和現在計算的數相除,維持先乘除後加減的邏輯
5.最後將所有數出棧後相加
解題程式碼
class Solution {
public int calculate(String s) {
String str = s.trim();
char[] chars = str.toCharArray();
//計算器用棧的方式去解決
Deque<Integer> stack = new ArrayDeque<>();
int idx= 0;
int temp1 = 0;
char op = '+';
//遍歷字串
while(idx<chars.length) {
char c = chars[idx];
if(c ==' ') {
idx++;
continue;
}
//如果碰到的是數字,就先計算數字結果
if(Character.isDigit(c)) {
//如果是數字
temp1=temp1*10+ c -'0';
idx++;
}
//如果碰到的是運算子,或者到末尾了,直接執行操作
if(!Character.isDigit(c)||idx == chars.length) {
int pre = 0;
switch (op) {
//加法,將已經算好的數直接存進去
case '+' :{
stack.addLast(temp1);
break;
}
case '-' :{
stack.addLast(-temp1);
break;
}
case '*' :{
pre = stack.removeLast();
stack.addLast(pre*temp1);
break;
}
case '/' :{
pre = stack.removeLast();
stack.addLast(pre/temp1);
break;
}
}
temp1 = 0;
op = c;
idx++;
}
}
int res =0;
while (!stack.isEmpty()) {
res+= stack.removeLast();
}
return res;
}
}
相關文章
- [演算法練習及思路-程式設計師面試金典(Java解法)]No77連續數列演算法程式設計師面試Java
- [演算法練習及思路-程式設計師面試金典(Java解法)]No46.漢諾塔問題演算法程式設計師面試Java
- 【程式設計師面試金典】20180801程式設計師面試
- 【程式設計師面試金典】洪水程式設計師面試
- 程式設計師面試金典Chapter1程式設計師面試APT
- Java初中級程式設計師面試題寶典Java程式設計師面試題
- Java程式設計師面試題及解答Java程式設計師面試題
- 【JAVA面試資料】程式設計師面試之葵花寶典2Java面試程式設計師
- 【JAVA面試資料】程式設計師面試之葵花寶典1Java面試程式設計師
- 好程式設計師:Java程式設計師面試秘籍程式設計師Java面試
- 智力題(程式設計師面試經典)程式設計師面試
- 好程式設計師Java教程之Java面試寶典Java IO篇程式設計師Java面試
- 好程式設計師Java教程分享經典Java main方法面試題程式設計師JavaAI面試題
- Java程式設計師面試學習資料彙總Java程式設計師面試
- 新書出版 |《Oracle程式設計師面試筆試寶典》新書Oracle程式設計師面試筆試
- 好程式設計師java分享Java面試寶典:類的載入過程程式設計師Java面試
- java程式設計師程式設計筆試基礎學習Java程式設計師筆試
- 程式設計師50+Java面試題程式設計師Java面試題
- JAVA程式設計師面試題庫分享Java程式設計師面試題
- 2024年程式設計師金九銀十面試寶典(持續更新中................)程式設計師面試
- Java程式設計師面試時應注意的三個經典問題!Java程式設計師面試
- 好程式設計師Java教程分享Java面試妙招程式設計師Java面試
- Java程式設計練習_241206Java程式設計
- 【程式設計師面試金典】三個空汽水瓶可以換一瓶汽水。程式設計師面試
- Java程式設計師面試常見問題Java程式設計師面試
- 新書出版 |《資料庫程式設計師面試筆試寶典》新書資料庫程式設計師面試筆試
- 程式設計師面試常問計算機網路問題程式設計師面試計算機網路
- JAVA程式設計師學到什麼程式可以去找工作及面試呢?Java程式設計師面試
- 中軟卓越:Java程式設計師面試技巧3Java程式設計師面試
- 2018年Java程式設計師最新BAT面試題Java程式設計師BAT面試題
- 程式設計師程式碼面試指南程式設計師面試
- java方法練習之簡單計算器Java
- 程式設計師面試經驗程式設計師面試
- Java程式設計師學習Rust程式設計 - infoworldJava程式設計師Rust
- 雲端計算工程師面試題集錦,雲端計算面試題及答案工程師面試題
- 雲端計算面試題及答案,雲端計算工程師面試題集錦面試題工程師
- 好程式設計師Java教程分享:Java工程師常見面試題程式設計師Java工程師面試題
- 好程式設計師Java教程分享Java面試題之Hibernate程式設計師Java面試題