题解 | #四则运算,递归处理括号#
四则运算
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 ; } }
一个菜鸟的算法刷题记录 文章被收录于专栏
分享一个菜鸟的成长记录