Basic Calculator II

问题描述

Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
Some examples:
“3+2*2” = 7
” 3/2 ” = 1
” 3+5 / 2 ” = 5
Note: Do not use the eval built-in library function.
意:实现字符串数学表达式的计算

算法思想

算法使用双向链表两次扫描计算(虽然不是最好的,但是思想很单纯,后续我会改进该算法,现在懒得动)
第一遍 计算 * 和 /
第二遍 计算 + 和 -

第一遍扫描,扫描字符串:
- 如果当前是数字,查看队列末尾是否为*或者/,如果是就计算当前数字和队列尾第二个数的结果,并加入队列。
- 如果当前是符号,直接加入队列末尾。
- 当第一遍扫描结束队列中剩下的就是数字和+ 、-

第二遍扫描,从头扫描队列
- 如果下一个是符号,移除并根据符号再获取下一个数值,计算结果加入队列头。

算法实现

import java.util.LinkedList;public class Solution {public static int calculate(String s) {LinkedList<Integer> linkedList = new LinkedList<Integer>();char[] characters = s.toCharArray();char c = ' ';int k = 0;for (int i = 0; i < characters.length; i++) {c = characters[i];k = 0;if (Character.isDigit(c)) {//获取while (Character.isDigit((c = characters[i++]))) {k = (c - 48) + k * 10;if (i == characters.length)break;}//如果上一个符号为*或者/,则计算上一个数值与当前数值的操作结果if (!linkedList.isEmpty()) {if (linkedList.getLast().intValue() == 42) {linkedList.removeLast();k = linkedList.removeLast() * k;} else if (linkedList.getLast().intValue() == 47) {linkedList.removeLast();k = linkedList.removeLast() / k;}}//记录当前数值到队列中linkedList.add(k);}//如果下一个操作是+或者-,加入队列,等待下一次遍历进行计算if (i < characters.length) {if (c != ' ')linkedList.add((int) c);i--;}}int result = 0;while (!linkedList.isEmpty()) {result = linkedList.removeFirst();if (!linkedList.isEmpty()) {int op = linkedList.removeFirst().intValue();if (op == 43) {result += linkedList.removeFirst();} else {result -= linkedList.removeFirst();}linkedList.addFirst(result);}}return result;}
}

算法时间

O(n)

演示结果

public static void main(String[] args) {System.out.println(calculate("100+1000*1+1000/10"));}

1200

【LeetCode】Basic Calculator II相关推荐

  1. LeetCode OJ Basic Calculator II

    Basic Calculator II 题目 思路 和这个一样:Basic Calculator I 代码 class ExpressionTransformation { public:string ...

  2. 【Leetcode】213. 打家劫舍II(House Robber II)

    Leetcode - 213 House Robber II (Medium) 题目描述:一个小偷沿着一条环形的街偷窃,给定数组表示每家屋子的金额,如果偷窃连续的两间屋子就会触发警报,求在不触发警报的 ...

  3. leetcode 227. Basic Calculator II | 227. 基本计算器 II(中缀表达式求值)

    题目 https://leetcode.com/problems/basic-calculator-ii/ 题解 这道题是 中缀表达式求值 的简化版(因为没有左右括号运算),不过输入的形式有两个处理起 ...

  4. 【LeetCode】275. H-Index II 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/h-index- ...

  5. 【leetcode】Path Sum II

    Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given su ...

  6. 【LeetCode】字符串 string(共112题)

    [3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...

  7. 【leetcode】解题日记(未完待续)

    开坑,有生之年系列,希望有一天能解出 leetcodeleetcodeleetcode 上的所有题目. 写题解好麻烦,懒得写(手动狗头),进度如下,不定期更新. 总题数 已解答 题解数 2058 23 ...

  8. 【LeetCode】【HOT】240. 搜索二维矩阵 II(抽象二叉搜索树)

    [LeetCode][HOT]240. 搜索二维矩阵 II 文章目录 [LeetCode][HOT]240. 搜索二维矩阵 II package hot;public class Solution24 ...

  9. 【LeetCode】【HOT】142. 环形链表 II(快慢指针)

    [LeetCode][HOT]142. 环形链表 II 文章目录 [LeetCode][HOT]142. 环形链表 II package hot;class ListNode{int val;List ...

最新文章

  1. OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能
  2. Windows7/10上快速搭建Tesseract-OCR开发环境操作步骤
  3. iOS架构-静态库.a之依赖第三方静态库.a的制作(8)
  4. java解析json_JAVA解析JSON数据
  5. 休眠:DDL模式生成
  6. python遇到对象_### python面对对象小汇总 #####
  7. 4.3定时器框架(Timer Framework)
  8. oracle 中execute immediate 是什么意思?
  9. 物联网可视化平台-场景编辑器-轻松实现三维地图搭建
  10. 怎么用数学绘图软件验证扇形面积公式?
  11. 用Python实现随机森林回归
  12. 校园二手市场需求分析
  13. 利用FME对坐标文件进行坐标转换
  14. 怎么释放mysql连接_数据库连接释放问题
  15. ORA-28001: the password has expired解决
  16. 如何搭建一个自己的私有云盘
  17. linux桌面网络连接是个X,Xbrowser如何运行多个X桌面
  18. 三色旗java_经典算法-(四)三色旗
  19. Linux下的32位C程序,linux系统c语言生成.so文件,生成64位可执行文件,在64位系统中运行32位的可执行文件...
  20. OpenCV打开摄像头《大华摄像头》

热门文章

  1. 2021-11-09逢七过
  2. 高手持续性自律,你间歇式自虐?
  3. 基于AR模型的功率谱matlab,基于AR模型法功率谱估计的Matlab实现
  4. 暑期实习+秋招面经合集(更新ing)
  5. Spring +dubbo +mybatis
  6. CGB2110-DAY09-Mybatis
  7. ASP.NET CORE MVC使用SCD(独立部署)发布
  8. 苦不苦看看红军二万五,累不累看看革命老前辈
  9. 【非参】python实现Nadaraya-Waston估计
  10. 和程序员谈个恋爱真心不容易,不过我从不后悔