题解 | #表达式求值#

表达式求值

http://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    public int solve (String s) {
        // write code here
        //将字符串放入队列中,可以解决递归返回下标不知道如何处理的问题
        LinkedList<Character> queue = new LinkedList<>();
        for(int i = 0;i<s.length();i++){
            queue.add(s.charAt(i));
        }
        return solve(queue);
        
    }
    public int solve(LinkedList<Character> queue){
        Stack<Integer> stack1 = new Stack<>();
        char sign = '+';
        int num = 0;
        while(!queue.isEmpty()){
            
            char ch = queue.poll();
            //遇见‘(’递归
            if(ch == '('){
                num = solve(queue);
            }
            //计算数字
            if(Character.isDigit(ch)){
                num = num * 10 + ch-'0';
            }
            //不是数字或者队列为空
            if(!Character.isDigit(ch)||queue.size()==0){
                if(sign == '-'){
                    stack1.push(-num);
                }else if(sign == '*'){
                    int num1 = stack1.pop();
                    stack1.push(num*num1);
                }else if(sign == '+'){
                    stack1.push(num);
                }
                //更新符号,数字重置
                sign = ch;
                num = 0;   
            }
            if(ch == ')'){
                break;
            }
           
        }
        //栈中的值求和返回
        int ans = 0;
        while(!stack1.empty()){
            ans += stack1.pop();
        }
        return ans;
    }
}
全部评论

相关推荐

07-22 11:53
门头沟学院 Java
终于有一个保底的offer了,但感觉是白菜价
北凝a:我想问问,提前批的offer 有问你啥时候到岗吗,如果你还想找其他的怎么办
点赞 评论 收藏
分享
积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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