题目就是计算表达式 1+2*3+4 = 11可以去搜parse mathematical expression,不考虑括号
Solution:
use two arrays to store numbers and signs.
nums = [1,2,3,4]
signs = [+, *, +]
scan signs, when we meet * or /, and change * or / into +, corresponding nums changed to [0, a*b] or [0, a/b]. for the example:
nums = [1,0,6,4]
signs = [+,+,+].
then do (zigzag) sum.
public int calcExpression(String expr) { //正则表达式,运算符得escape,并且用[]包裹,表示或;否则会表示"+-*/"四个都匹配才行 String[] digits = expr.split("[\\+\\-\\*\\/]"); //[, +, *, -, /], 第一个是leading empty string, trailing empty string会自动去掉,而头部的不会 String[] ops = expr.split("\\d+"); // 或者下面这种做法,移除第一个数字 // String[] ops = expr.replaceFirst("\\d+", "").split("\\d+"); int n = digits.length; int[] nums = new int[n]; for(int i=0; i<n; i++) { nums[i] = Integer.valueOf(digits[i]); } for(int i=1; i<ops.length; i++) {//因为第0项是空字符串,所以从第一项开始 if(ops[i].equals("*")) { nums[i] = nums[i-1] * nums[i]; nums[i-1] = 0; } else if(ops[i].equals("/")) { nums[i] = nums[i-1] / nums[i]; nums[i-1] = 0; } else if(ops[i].equals("-")) { //不能减,因为后面有可能是*/运算,比-的优先度高,所以要变成负数的加法,这样不影响优先级 nums[i] = -nums[i]; } } int sum = 0; for(int i=0; i<n; i++) { sum += nums[i]; } return sum; }
Solution 2:
可以用Shunting-Yard先转换成逆波兰表达式,然后再求值,这种方法比较通用,但是实现起来可能要花点时间。具体代码见本博客的如下文章。
相关推荐
# 解压命令 tar -zxvf flink-shaded-hadoop-2-uber-3.0.0-cdh6.2.0-7.0.jar.tar.gz # 介绍 用于CDH部署 Flink所依赖的jar包
flink-shaded-hadoop-2-uber-2.7.5-10.0.jar
flink-shaded-hadoop-2-uber-2.7.5-10.0
dbeaver连接hive时需要的驱动包hive-jdbc-uber-2.6.5.0-292.jar
hive-jdbc-uber-2.6.5.0-292.jar驱动
hive-jdbc-uber-2.6.5.0-292.jar 驱动下载,hive-jdbc-uber-2.6.5.0-292.jar,hive-jdbc-uber-2.6.5.0-292.jar
flink-shaded-hadoop-2-uber-2.7.2-11.0.jar 是flink1.11集成hadoop2.7.2的jar依赖。
hive-jdbc-uber-2.6.5.0-292.jar DbVisualizer (as of version 9.5.5) Below is an example configuration using DbVisualizer: Open the Diver Manager dialog ("Tools" > "Driver Manager...") and hit the ...
当前的flink版本是一个纯净的版本,如果需要依赖其他系统(例如咱们当前flink的相关数据都存储到了hdfs),则需要添加相应的jar包 下载完成后上传到${FLINK_HOME}/lib/目录下
hadoop版本2.7.4,flink 版本1.11,官网没有编译好的flink-shaded-hadoop-2-uber-2.7.4-11.0.jar,自己编译成功的jar,可以直接放到flink下lib目录下即可
kerberos的hive-jdbc-uber-3.1.2包和即席查询的yanagishima
Flink1.10.1编译hadoop2.7.2 编译flink-shaded-hadoop-2-uber
flink 搭建 Standalone 高可用模式 需要用到的关于整合 hadoop 的jar包
This repository contains a number of shaded dependencies for the Apache Flink project. The purpose of these dependencies is to provide a single instance of a shaded dependency in the Flink ...
新版flink不支持hadoop,需要下载hadoop依赖,放入到FLINK_HOME/lib目录下,才可以连接hdfs。
Flink jar包,官网下载很慢,有需要的自行下载 Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink...