题解 | #四则运算,递归处理括号#

四则运算

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

import java.util.* ;
public class Main{
    public static void main(String...args) {
        Scanner sc = new Scanner(System.in) ;
        while(sc.hasNextLine()) {
            ptr = 0 ;
            char arr[] = sc.nextLine().toCharArray() ;
            System.out.println(comp(arr)) ;
        }
    }
    static int ptr = 0 ; 
    public static int comp(char[] arr) {
        char opt = '+' ;
        int num = 0 ;
        Stack<Integer> st = new Stack<>() ;
        while(ptr < arr.length) {
            if(arr[ptr] == '(' || arr[ptr] == '[' || arr[ptr] == '{') {
                ptr ++ ;
                num = comp(arr) ;//将括号里面又当成是一个 没括号的计算式 递归计算
            }
            //拿到数字(数字有可能大于一位)
            while(ptr < arr.length && isNum(arr[ptr])) {
                num = num*10 + (arr[ptr]-'0') ;
                ptr ++ ;
            }
            //看上一个符号是什么
            switch(opt) {
                case '+' :
                    st.push(num) ;break ;
                case '-' :
                    st.push(-num) ;break ;
                case '*' :
                    st.push(st.pop()*num) ;break ;
                case '/' :
                    st.push(st.pop()/num) ;break ;
            }
            //重置得到的数字
            num = 0 ;
            //每次处理完数字后 将其紧跟的符号记录,便于下一个数字入栈或计算
            if(ptr < arr.length) {
               //还要检查是否到了右括号,若是 那么break计算结果并返回
                if(arr[ptr] == ')' || arr[ptr] == ']' || arr[ptr] == '}'){
                    ptr ++ ;
                    break ;
                }
                 opt = arr[ptr] ;
                
            }
            ptr ++ ;
        }
        //将栈中的和数都弹出来相加即为结果
        int ret = 0 ;
        while(!st.isEmpty()) {
            ret += st.pop() ;
        }
        return ret ;
    }
    public static boolean isNum(char ch) {
        if(ch >= '0' && ch <= '9') {
            return true ;
        }
        return false ;
    }
} 

一个菜鸟的算法刷题记录 文章被收录于专栏

分享一个菜鸟的成长记录

全部评论

相关推荐

头像
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务