zoukankan      html  css  js  c++  java
  • 递归实现基本计算器+-*/()

    实现一个基本的计算器来计算一个简单的字符串表达式的值。

    字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,乘号*,除号/,非负整数和空格 。

     1 /*
     2 
     3 https://leetcode-cn.com/problems/basic-calculator/
     4 
     5 实现一个基本的计算器来计算一个简单的字符串表达式的值。
     6 
     7 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格  。
     8 
     9 扩展: * /
    10 
    11 * */
    12 import java.util.ArrayList;
    13 import java.util.List;
    14 import java.util.Stack;
    15 
    16 public class code224_CalculatorI
    17 {
    18     public int calculate(String s) {
    19         List<Character> list = new ArrayList<>();
    20         for(int i = 0; i < s.length(); i++)
    21             list.add(s.charAt(i));
    22         return helper(list);
    23     }
    24     public int helper(List<Character> s){
    25         Stack<Integer> stack = new Stack<>();
    26         char sign = '+';
    27         int num = 0, res = 0;
    28         while(s.size() > 0)
    29         {
    30             char c = s.remove(0);
    31             if (Character.isDigit(c))
    32             {
    33                 num = 10 * num + (c - '0');
    34             }
    35             if (c == '(')
    36                 num = helper(s);
    37             if ((!Character.isDigit(c) && c != ' ') || s.size() == 0)
    38             {
    39                 if (sign == '+')
    40                     stack.push(num);
    41                 else if (sign == '-')
    42                     stack.push(-num);
    43                 else if (sign == '*')
    44                 {
    45                     stack.push(stack.pop() * num);
    46                 }
    47                 else if (sign == '/')
    48                 {
    49                     stack.push(stack.pop() / num);
    50                 }
    51                 sign = c;
    52                 num = 0;
    53             }
    54             if (c == ')')
    55             {
    56                 break;
    57             }
    58         }
    59         while (!stack.isEmpty()){
    60             res += stack.pop();
    61         }
    62         return res;
    63     }
    64     public static void main(String[] args){
    65         code224_CalculatorI calculator = new code224_CalculatorI();
    66         System.out.println(calculator.calculate("2 * (3 + 5)"));
    67         System.out.println(calculator.calculate("(1+(4+5+2)-3)+(6+8)"));
    68     }
    69 }
  • 相关阅读:
    codeforces C. Cows and Sequence 解题报告
    codeforces A. Point on Spiral 解题报告
    codeforces C. New Year Ratings Change 解题报告
    codeforces A. Fox and Box Accumulation 解题报告
    codeforces B. Multitasking 解题报告
    git命令使用
    shell简单使用
    知识束缚
    php 调用系统命令
    数据传输方式(前端与后台 ,后台与后台)
  • 原文地址:https://www.cnblogs.com/Z-D-/p/12639502.html
Copyright © 2011-2022 走看看