博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode----227. Basic Calculator II
阅读量:4112 次
发布时间:2019-05-25

本文共 1907 字,大约阅读时间需要 6 分钟。

链接:

大意:

实现一个计算器。给定一个字符串s,字符串s中的字符由'0'-'9'的数字以及'+'、'-'、'*'、'/'以及空格组成。要求求出字符串s所代表表达式的结果。例子:

思路:

构造两个栈,一个为操作数栈,里面存放操作数(整数);一个为操作符栈,里面存放四种运算符(字符)。

  1. 将字符串中的所有操作数放入放入操作数栈,所有操作符放入操作符栈
  2. 根据操作数栈和操作符栈进行乘除法运算
  3. 最后进行加减法运算 

代码:

// 两个相邻数字之间没有空格class Solution {    public int calculate(String s) {        ArrayList
nums = new ArrayList<>(); // 构造操作数栈 ArrayList
op = new ArrayList<>(); // 构造操作符栈 char pre = ' '; for (char c : s.toCharArray()) { if (c != ' ') { // 当前字符是数字 if (c >= '0' && c <= '9') { // 如果前一个字符也是数字 if (pre >= '0' && pre <= '9') { if (nums.size() > 0) nums.add(nums.remove(nums.size() - 1) * 10 + (c - '0')); else nums.add(c - '0'); } else { nums.add(c - '0'); } } else { // 当前数字是操作符 op.add(c); } } pre = c; } int idx = 0; // 先处理乘除法 while (idx < op.size()) { char c = op.get(idx); if (c == '*' || c == '/') { op.remove(idx); int num1 = nums.get(idx), num2 = nums.get(idx + 1); if (c == '*') nums.set(idx, num1 * num2); else nums.set(idx, num1 / num2); nums.remove(idx + 1); continue; } idx++; } // 再处理加减法 int res = nums.get(0); idx = 0; while (idx < op.size()) { char c = op.get(idx); if (c == '+') res += nums.get(idx + 1); if (c == '-') res -= nums.get(idx + 1); idx++; } return res; }}

结果:

结论:

使用栈思想解决的一个经典问题,但是感觉代码有点冗长。。。 

 

 

转载地址:http://xaesi.baihongyu.com/

你可能感兴趣的文章
程序开发免费的接口
查看>>
Think in Java之构造器的真正调用顺序
查看>>
Android异步更新UI的四种方式
查看>>
Mysql数据库的使用
查看>>
Mysql数据库的安装及管理
查看>>
启动及关闭 MySQL 服务器
查看>>
Mysql的增删改查
查看>>
Mysql数据库的条件语句like子句
查看>>
mysql的排序、分组、null的处理
查看>>
Mysql中的AUTO_INCREMENT
查看>>
mysql中重复数据的处理及sql注入
查看>>
几个比较好用的Androidstudio插件
查看>>
Android Binder机制浅析
查看>>
Android内核解读-应用的安装过程
查看>>
构造器的真正调用顺序
查看>>
Android开发能够帮你更好开发的19个开发工具
查看>>
Android开发编程规范
查看>>
image图像算法
查看>>
Android常用组件,太全了
查看>>
最流行的Android组件、工具、框架大全
查看>>