目錄
224. 基本計(jì)算器 Basic Calculator????????
227. 基本計(jì)算器 II Basic Calculator??????
?? 每日一練刷題專(zhuān)欄???
Rust每日一練 專(zhuān)欄
Golang每日一練 專(zhuān)欄
Python每日一練 專(zhuān)欄
C/C++每日一練 專(zhuān)欄
Java每日一練 專(zhuān)欄
224. 基本計(jì)算器 Basic Calculator
給你一個(gè)字符串表達(dá)式?s
?,請(qǐng)你實(shí)現(xiàn)一個(gè)基本計(jì)算器來(lái)計(jì)算并返回它的值。
注意:不允許使用任何將字符串作為數(shù)學(xué)表達(dá)式計(jì)算的內(nèi)置函數(shù),比如?eval()
?。
示例 1:
輸入:s = "1 + 1"
輸出:2
示例 2:
輸入:s = " 2-1 + 2 "
輸出:3
示例 3:
輸入:s = "(1+(4+5+2)-3)+(6+8)"
輸出:23
提示:
1 <= s.length <= 3?* 10^5
-
s
?由數(shù)字、'+'
、'-'
、'('
、')'
、和?' '
?組成 -
s
?表示一個(gè)有效的表達(dá)式 -
'+'?不能用作一元運(yùn)算(例如,?"+1"?和?
"+(2 + 3)"
?無(wú)效) -
'-'?可以用作一元運(yùn)算(即?"-1"?和?
"-(2 + 3)"
?是有效的) - 輸入中不存在兩個(gè)連續(xù)的操作符
- 每個(gè)數(shù)字和運(yùn)行的計(jì)算將適合于一個(gè)有符號(hào)的 32位 整數(shù)
代碼: 只有+-沒(méi)有*/,但有括號(hào)
package main
import "fmt"
func calculate(s string) int {
stack := make([]int, 0)
num := 0
sign := '+'
for i := 0; i < len(s); i++ {
c := s[i]
if isDigit(c) {
num = num*10 + int(c-'0')
}
if c == '(' {
left := 1
j := i + 1
for left > 0 {
if s[j] == '(' {
left++
} else if s[j] == ')' {
left--
}
j++
}
num = calculate(s[i+1 : j])
i = j - 1
}
if c != ' ' && !isDigit(c) || i == len(s)-1 {
if sign == '-' {
num = -num
}
stack = append(stack, num)
sign = rune(c)
num = 0
}
}
sum := 0
for _, num := range stack {
sum += num
}
return sum
}
func isDigit(c byte) bool {
return c >= '0' && c <= '9'
}
func main() {
s := "1 + 1"
fmt.Println(calculate(s))
s = " 2-1 + 2 "
fmt.Println(calculate(s))
s = "(1+(4+5+2)-3)+(6+8)"
fmt.Println(calculate(s))
}
輸出:
2
3
23
227. 基本計(jì)算器 II Basic Calculator
給你一個(gè)字符串表達(dá)式?s
?,請(qǐng)你實(shí)現(xiàn)一個(gè)基本計(jì)算器來(lái)計(jì)算并返回它的值。
整數(shù)除法僅保留整數(shù)部分。
你可以假設(shè)給定的表達(dá)式總是有效的。所有中間結(jié)果將在?[-2^31, 2^31 - 1]
?的范圍內(nèi)。
注意:不允許使用任何將字符串作為數(shù)學(xué)表達(dá)式計(jì)算的內(nèi)置函數(shù),比如?eval()
?。
示例 1:
輸入:s = "3+2*2" 輸出:7
示例 2:
輸入:s = " 3/2 " 輸出:1
示例 3:
輸入:s = " 3+5 / 2 " 輸出:5
提示:
1 <= s.length <= 3 * 10^5
-
s
?由整數(shù)和算符?('+', '-', '*', '/')
?組成,中間由一些空格隔開(kāi) -
s
?表示一個(gè)?有效表達(dá)式 - 表達(dá)式中的所有整數(shù)都是非負(fù)整數(shù),且在范圍?
[0, 2^31 - 1]
?內(nèi) - 題目數(shù)據(jù)保證答案是一個(gè)?32-bit 整數(shù)
代碼: 只有+-*/,沒(méi)有括號(hào)
package main
import "fmt"
func calculate(s string) int {
stack := make([]int, 0)
num := 0
sign := '+'
for i := 0; i < len(s); i++ {
c := s[i]
if isDigit(c) {
num = num*10 + int(c-'0')
}
if c != ' ' && !isDigit(c) || i == len(s)-1 {
if sign == '+' {
stack = append(stack, num)
} else if sign == '-' {
stack = append(stack, -num)
} else if sign == '*' {
stack[len(stack)-1] *= num
} else if sign == '/' {
stack[len(stack)-1] /= num
}
sign = rune(c)
num = 0
}
}
sum := 0
for _, num := range stack {
sum += num
}
return sum
}
func isDigit(c byte) bool {
return c >= '0' && c <= '9'
}
func main() {
s := "3+2*2"
fmt.Println(calculate(s))
s = " 3/2 "
fmt.Println(calculate(s))
s = " 3+5 / 2"
fmt.Println(calculate(s))
}
輸出:
7
1
5
Stack和Queue
都是一種線(xiàn)性數(shù)據(jù)結(jié)構(gòu),其主要區(qū)別在于數(shù)據(jù)的操作方式。
Stack
是一種后進(jìn)先出(Last In First Out,LIFO)的數(shù)據(jù)結(jié)構(gòu),即最后一個(gè)入棧的元素最先出棧,其操作包括壓棧(push)和彈棧(pop)。
Queue
是一種先進(jìn)先出(First In First Out,F(xiàn)IFO)的數(shù)據(jù)結(jié)構(gòu),即最先入隊(duì)的元素最先出隊(duì),其操作包括入隊(duì)(enqueue)和出隊(duì)(dequeue)。
相同點(diǎn)
在于都可以使用數(shù)組或鏈表來(lái)實(shí)現(xiàn),同時(shí)都是基于線(xiàn)性結(jié)構(gòu)的數(shù)據(jù)類(lèi)型。
不同點(diǎn)
在于其數(shù)據(jù)操作的方式不同,Stack的操作方式是LIFO,而Queue的操作方式是FIFO。
兩種數(shù)據(jù)結(jié)構(gòu)在不同的場(chǎng)景下有不同的應(yīng)用,比如在計(jì)算機(jī)中的函數(shù)調(diào)用中常用Stack來(lái)實(shí)現(xiàn)函數(shù)調(diào)用棧,而在消息隊(duì)列中則常用Queue來(lái)實(shí)現(xiàn)消息的異步處理。
?? 每日一練刷題專(zhuān)欄???
? 持續(xù),努力奮斗做強(qiáng)刷題搬運(yùn)工!
?? 點(diǎn)贊,你的認(rèn)可是我堅(jiān)持的動(dòng)力!?
???收藏,你的青睞是我努力的方向!?
? 評(píng)論,你的意見(jiàn)是我進(jìn)步的財(cái)富!??
??主頁(yè):https://hannyang.blog.csdn.net/?
|
Rust每日一練 專(zhuān)欄(2023.5.16~)更新中... |
|
Golang每日一練 專(zhuān)欄(2023.3.11~)更新中... |
|
Python每日一練 專(zhuān)欄(2023.2.18~2023.5.18)暫停更 |
|
C/C++每日一練 專(zhuān)欄(2023.2.18~2023.5.18)暫停更 |
|
Java每日一練 專(zhuān)欄(2023.3.11~2023.5.18)暫停更文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-465618.html |
到了這里,關(guān)于Golang每日一練(leetDay0081) 基本計(jì)算器I\II Basic Calculator的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!