题解 | #四则运算#单栈解法

四则运算

https://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e

package main

import (
    "fmt"        
//     "sort"
    "strings"
    "bufio"
    "os"
//     "strconv"
)

func main(){
    input := bufio.NewScanner(os.Stdin)
    input.Scan()
    data := input.Text()
    a := strings.Replace(data, "{", "(", -1)
    b := strings.Replace(a, "}", ")", -1)
    c := strings.Replace(b, "[", "(", -1)
    d := strings.Replace(c, "]", ")", -1)
//     fmt.Println(d)
    fmt.Println(cal(d))
    
}

func cal(s string)int{
//     fmt.Println(s, len(s))
    num := 0
    res := 0
    sign := byte('+')
    if s[0]=='-'{
        sign=byte('-')
    }
    stack := []int{}
    for i := 0;i<len(s);i++{
        if isDigit(s[i]){
            num = num*10 + int(s[i]-'0')
        }
        if s[i]=='(' {
            count := 1
            j := i+1
            for count>0{
                if s[j]=='('{
                    count++
                }else if s[j]==')'{
                    count--
                }
                j++
            }
            num = cal(s[i+1:j-1])
            i = j-1
        }
        if !isDigit(s[i]) || 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 = s[i]
            num = 0
        }
        if s[i]==')'{
            continue
        }
    }
    for _,i := range stack{
        res += i
    }
    return res
}

func isDigit(n byte)bool{
    if n>='0'&&n<='9'{
        return true  
    }else{
        return false  
    }
}

全部评论
递归用的很妙
点赞 回复 分享
发布于 2022-09-05 16:32 浙江

相关推荐

03-21 10:53
复旦大学 Java
大家好,我是@程序员花海,眼下&nbsp;26&nbsp;届春招、27&nbsp;届暑期实习全面开启,后端卷到没边,AI&nbsp;Agent的岗位占主导,很多牛友在我的评论区留言,想让我出一份Agent学习路线。我特意去看了下,打开淘天的招聘页面,以校招为例,一眼望去全是AI相关的岗位,只能说之后绝大多数岗位都会快速推进AI的落地和实践。之前写过&nbsp;Java&nbsp;后端&nbsp;3&nbsp;个月抢救路线https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users,也收到了牛友们的强烈好评,这次专门给后端转&nbsp;Agent做一套最少必要知识路线——&nbsp;不堆概念、不啃论文,只学面试必问、项目...
在职牛马didi:这篇路线整理得很系统,把后端知识映射到Agent体系这个思路特别实用。我自己也是从Java转做AI的,感触很深:工程底子扎实的人转Agent确实有优势,RAG和工具编排这些核心能力本质上都是后端逻辑的延伸。我们团队在做天猫的AI应用落地,方向跟你这篇路线里的企业级RAG和Agent系统很接近。暑期实习还在招AI应用研发工程师,JD可以参考看看跟你背景是否匹配:https://www.nowcoder.com/jobs/detail/440929?jobId=440929
软件开发投递记录
点赞 评论 收藏
分享
零零幺零零幺:至少再做一个项目,然后猛投小厂,不然有点难
点赞 评论 收藏
分享
03-19 18:27
已编辑
门头沟学院 C++
26学院本太难了,很多公司机筛就给我刷了。机会都难拿到如果是简历存在问题也欢迎拷打————————————————————分割线——————————————————————2026.3.4更新:发完贴之后,时不时投递又收到了不少的笔试/面试邀请。主要是之前投递简历出去之后基本上都是沉默状态,年后好转了不少timeline:2026.01.21&nbsp;文远知行笔试,半年多没刷算法题&nbsp;-&gt;挂&nbsp;(后续HR说春招可以重新安排笔试)2026.2.4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小鹏汇天&nbsp;技术一面,第二周收到结果&nbsp;-&gt;挂2026.2.12&nbsp;&nbsp;&nbsp;大众Cariad代招&nbsp;技术二面&nbsp;-&gt;Offer2026.2.28&nbsp;&nbsp;&nbsp;多益网络技术面试,由于风评太差,一直在犹豫要不要接面试&nbsp;-&gt;推迟-----------分割线-----------2026.3&nbsp;月前的某一天,临时去电网报名了二批计算机岗位的笔试2026.3.6&nbsp;从上家公司实习离职,氛围最好的一家公司,leader&nbsp;说可以帮忙转正,但是流程太长,而且我们部门据说只有一个&nbsp;hc,更想要研究生,我很有可能是会被签外包公司在这里干活,就离职了。2026.3.9&nbsp;入职新公司,大众Cariad&nbsp;以外部公司的身份进组,项目组签了三年,后续三年应该都可以在这里呆,不知道有没有希望原地跳槽。2026.3.10&nbsp;电网考试居然说我通过资格审查了,短信约我去参加资格审查,请假一天,买了&nbsp;12&nbsp;号晚上的机票回成都2026.3.15&nbsp;参加国家电网三新计算机类的笔试2026.3.17&nbsp;电网出成绩了,感觉很低。觉得已经🈚️了2026.3.18&nbsp;收到电网面试通知,通知&nbsp;3.22-3.25&nbsp;这个时间去面试,我的岗位只招&nbsp;1&nbsp;个人。据说面试只有&nbsp;2-3&nbsp;人,不知道能不能成功
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务