算法題:基本計算器(python解法)

題目:

實現(xiàn)一個基本的計算器來計算一個簡單的字符串表達式的值。

字符串表達式僅包含非負整數(shù)捷兰,+, - 负敏,*贡茅,/ 四種運算符和空格??。 整數(shù)除法僅保留整數(shù)部分其做。

示例?1:

輸入: "3+2*2"

輸出: 7

示例 2:

輸入: " 3/2 "

輸出: 1

示例 3:

輸入: " 3+5 / 2 "

輸出: 5

說明:

你可以假設(shè)所給定的表達式都是有效的顶考。

請不要使用內(nèi)置的庫函數(shù) eval

來源:力扣(LeetCode)

鏈接:https://leetcode-cn.com/problems/basic-calculator-ii

解題思路:

任何算法題,我們都可以假設(shè)最簡單的情況入手,寫一個簡單的框架出來,再逐步拓展復(fù)雜的情況,逐漸完善自己的算法

1.只考慮加減法情況,并且沒有括號,如s = “1+123”

設(shè)變量num=0,存放當(dāng)前數(shù)字,給它初始化為0,?這里它的變化過程是 0 1 123

變量sign=‘+’,存放當(dāng)前符號,并給他初始化為‘+’,這里它的變化過程是 ‘+’ ‘+’

變量stack=[]來存放結(jié)果,并初始化為空列表

2.遍歷s,當(dāng)碰到不同的情況將它的值放到上述不同的容器里

這里num有個難點,比如字符串‘123’遍歷是是1->2->3這樣進來的,怎么將它變成整型123?

如果只用int轉(zhuǎn)換,如果是一個巨大的數(shù)字,立馬就內(nèi)存溢出了,所以要循環(huán)遍歷 比如先進來1?

num = 0

num = 10*num+new num?

10*0 +1 = 1

10*1+2 = 12

10*12+3 = 123

3.數(shù)字的結(jié)果num 和運算符stack 計算完成后 添加到stack,最后只需要計算stack中的和就好了

if sign =='+':

stack.append(num)

elif sign =='-':

stack.append(-num)


4.補充

運算符乘法: 乘法等于上一個的值乘以下一個的值,所以取stack[-1]*num

運算符出發(fā): 乘法等于上一個的值整除(這道題不考慮小數(shù))下一個的值,所以取stack[-1] //num

括號:

因為括號具有遞歸性質(zhì)。我們拿字符串3*(4-5/2)-6舉例:

calculate(3*(4-5/2)-6)

= 3 * calculate(4-5/2) - 6

= 3 * 2 - 6

= 0

可以腦補一下妖泄,無論多少層括號嵌套驹沿,通過 calculate 函數(shù)遞歸調(diào)用自己,都可以將括號中的算式化簡成一個數(shù)字蹈胡。換句話說渊季,括號包含的算式,我們直接視為一個數(shù)字就行了罚渐。

現(xiàn)在的問題是却汉,遞歸的開始條件和結(jié)束條件是什么?遇到(開始遞歸荷并,遇到)結(jié)束遞歸


完整的代碼:


def calculate(s:str) ->int:

def helper(s: List) ->int:

stack = []

sign ='+'

? ? ? ? num =0

? ? ? ? while len(s) >0:

c = s.pop(0)

if c.isdigit():

num =10 * num +int(c)

if (not c.isdigit()and c !=' ')or len(s) ==0:

if sign =='+':

stack.append(num)

elif sign =='-':

stack.append(-num)

elif sign =='*':

stack[-1] = stack[-1] * num

elif sign =='/':

# python 除法向 0 取整的寫法

? ? ? ? ? ? ? ? ? ? stack[-1] =int(stack[-1] /float(num))

num =0

? ? ? ? ? ? ? ? sign = c

return sum(stack)

# 需要把字符串轉(zhuǎn)成列表方便操作

? ? return helper(list(s))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末合砂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子源织,更是在濱河造成了極大的恐慌翩伪,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谈息,死亡現(xiàn)場離奇詭異缘屹,居然都是意外死亡,警方通過查閱死者的電腦和手機侠仇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門囊颅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人傅瞻,你說我怎么就攤上這事踢代。” “怎么了嗅骄?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵胳挎,是天一觀的道長。 經(jīng)常有香客問我溺森,道長慕爬,這世上最難降的妖魔是什么窑眯? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮医窿,結(jié)果婚禮上磅甩,老公的妹妹穿的比我還像新娘。我一直安慰自己姥卢,他們只是感情好卷要,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著独榴,像睡著了一般僧叉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棺榔,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天瓶堕,我揣著相機與錄音,去河邊找鬼症歇。 笑死郎笆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的忘晤。 我是一名探鬼主播题画,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼德频!你這毒婦竟也來了苍息?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤壹置,失蹤者是張志新(化名)和其女友劉穎竞思,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钞护,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡盖喷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了难咕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片课梳。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖余佃,靈堂內(nèi)的尸體忽然破棺而出暮刃,到底是詐尸還是另有隱情,我是刑警寧澤爆土,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布椭懊,位于F島的核電站,受9級特大地震影響步势,放射性物質(zhì)發(fā)生泄漏氧猬。R本人自食惡果不足惜背犯,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盅抚。 院中可真熱鬧漠魏,春花似錦、人聲如沸妄均。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丛晦。三九已至,卻和暖如春提陶,著一層夾襖步出監(jiān)牢的瞬間烫沙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工隙笆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锌蓄,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓撑柔,卻偏偏與公主長得像瘸爽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子铅忿,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 讀完本文剪决,你可以去力扣拿下如下題目: 224.基本計算器[https://leetcode-cn.com/prob...
    labuladong閱讀 692評論 1 4
  • 設(shè)原始數(shù)據(jù)規(guī)模為n,需要采樣的數(shù)量為k 先選取數(shù)據(jù)流中的前k個元素檀训,保存在集合A中柑潦; 從第j(k + 1 <= j...
    Impossible安徒生閱讀 295評論 0 0
  • 棧,隊列峻凫,雙端隊列無序鏈表渗鬼,有序鏈表二叉樹,堆荧琼,二叉搜索樹譬胎,AVL樹圖以及一些算法 coding: utf-8 u...
    hugoren閱讀 625評論 0 0
  • 久違的晴天,家長會命锄。 家長大會開好到教室時堰乔,離放學(xué)已經(jīng)沒多少時間了。班主任說已經(jīng)安排了三個家長分享經(jīng)驗脐恩。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,524評論 16 22
  • 今天感恩節(jié)哎浩考,感謝一直在我身邊的親朋好友。感恩相遇被盈!感恩不離不棄析孽。 中午開了第一次的黨會搭伤,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,567評論 0 11