394. Decode String

四种情况: 

    1. 数字,把之前有的数字乘以10再加本数字

    2. ' [ ', 入口, 把之前的数字压入栈中并num归零。

    3. ' ] ' ,出口,归零。用dfs先讲栈中的最顶的string都取出,并按添加cnt次。

    4. 字母,压入栈中。

instanceof string : 判断是不是string类型。

class Solution {
public String decodeString(String s) {
int num = 0;
Stack<Object> stack = new Stack<>(); for(char c : s.toCharArray()){
//1.number
if(Character.isDigit(c)){
num = num * 10 + c - '0';
}else if(c == '['){//2. [
stack.push(Integer.valueOf(num));
num = 0;
}else if(c == ']'){//3. ]
String newstr = dfs(stack);
Integer cnt = (Integer)stack.pop();
for(int i = 0; i < cnt; i++){
stack.push(newstr);
}
}else{//letter
stack.push(String.valueOf(c));
}
}
return dfs(stack);
} private String dfs(Stack<Object> stack){
Stack<String> tmp = new Stack<>();
while(!stack.isEmpty() && stack.peek() instanceof String){
tmp.push((String)stack.pop());
}
StringBuilder sb = new StringBuilder();
while(!tmp.isEmpty()){
sb.append(tmp.pop());
}
return sb.toString();
}
}

224. Basic Calculator

我们需要一个栈来辅助计算,用个变量sign来表示当前的符号,我们遍历给定的字符串s,如果遇到了数字,由于可能是个多位数,所以我们要用while循环把之后的数字都读进来,然后用sign*num来更新结果res;如果遇到了加号,则sign赋为1,如果遇到了符号,则赋为-1;如果遇到了左括号,则把当前结果res和符号sign压入栈,res重置为0,sign重置为1;如果遇到了右括号,结果res乘以栈顶的符号,栈顶元素出栈,结果res加上栈顶的数字,栈顶元素出栈。

注意当最后一位不为0的时候,要计算出结果。

class Solution {
public int calculate(String s) {
Stack<Integer> stack = new Stack<>(); int i = 0;
int num = 0;
int sign = 1;
int subsum = 0;
while(i < s.length()){
char c = s.charAt(i);
if(Character.isDigit(c)){
num = num * 10 + (c - '0');
}else if(c == '+'){
subsum += num * sign;
sign = 1;
num = 0;
}else if(c == '-'){
subsum += num * sign;
sign = -1;
num = 0;
}else if(c == '('){
stack.push(subsum);
subsum = 0;
num = 0;
stack.push(sign);
sign = 1;
}else if(c == ')'){
subsum += num * sign;
num = 0;
sign = 1;
subsum *= stack.pop();
subsum += stack.pop();
}
i++;
}
if(num != 0){
subsum += num * sign;
}
return subsum;
}
}

<Stack> (高频)394 ( 高频)224的更多相关文章

  1. 用 R 进行高频金融数据分析简介

    作者:李洪成 摘自:http://cos.name/wp-content/uploads/2013/11/ChinaR2013SH_Nov03_04_LiHongcheng.pdf 高频数据 金融市场 ...

  2. 高频交易[z]

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:袁浩瀚链接:https://www.zhihu.com/question/21789812/answer/22178178来源 ...

  3. Java才是世界上最好的语言,Java在高频交易中替代C++

    高频交易 高频交易是指从那些人们无法利用的极为短暂的市场变化中寻求获利的计算机化交易,比如,某种证券买入价和卖出价差价的微小变化,或者某只股票在不同交易所之间的微小价差.在高频交易中,自动化应用程序每 ...

  4. Deep Dream 模型

    本节的代码参考了TensorFlow 源码中的示例程序https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/ ...

  5. 【转】用Python做股市量化策略投资数据分析

    金融量化分析介绍     本文摘要; 金融量化分析介绍 1.什么是金融量化分析 2.金融量化分析可以干什么 3.为什么将python运用于金融 4.常用库简介 1.什么是金融量化分析 从标题中我们可以 ...

  6. Deep Dream模型与实现

    Deep Dream是谷歌公司在2015年公布的一项有趣的技术.在训练好的卷积神经网络中,只需要设定几个参数,就可以通过这项技术生成一张图像. 本文章的代码和图片都放在我的github上,想实现本文代 ...

  7. 极客DIY:廉价电视棒玩转GNSS-SDR,实现GPS实时定位

    0×00 前言 GNSS是Global Navigation Satellite System的缩写.中文称作:全球卫星导航系统.全球导航卫星系统. GNSS泛指所有的卫星导航系统,包括全球的.区域的 ...

  8. 用Python做股市数据分析(一)

    本文由 伯乐在线 - 小米云豆粥 翻译.未经许可,禁止转载!英文出处:Curtis Miller.欢迎加入翻译组. 这篇博文是用Python分析股市数据系列两部中的第一部,内容基于我犹他大学 数学39 ...

  9. 【python-opencv】16-图像平滑

    [微语]“你以后向成为什么样的人?”    “什么意思,难道我以后就不能成为我自己吗?”    ----<阿甘正传> 补充知识点:如何理解图像的低频是轮廓,高频是噪声和细节 图像的频率:灰 ...

随机推荐

  1. Oracle 分页 ROWNUM 两种分页方法和ROWID用法

    一 原因一 oracle默认为每个表生成rowmun,rowid字段,这些字段我们称之为伪列 测试表 CREATE TABLE A ( AID NUMBER() primary key, ANAME ...

  2. java 后台上传文件

    java 后台上传文件 public static String uploadFile(File file, String RequestURL) throws IOException { Strin ...

  3. Linux & Go & Vscode & 插件

    Linux Deepin 安装Go 安装Go环境 sudo apt-get install golang 验证一下: 输入 $ go env 输出 GOARCH="amd64" G ...

  4. 通过 Filebeat 收集 ubuntu 系统日志

    需求:收集 ubuntu 系统日志,发送给 logstash,再由 logstash 把数据传递给 elasticsearch,最后通过 kibana 展示日志数据. Filebeat System ...

  5. 从七个方面,面试BAT大厂高级工程师,纯干货!

    转载注明:https://blog.csdn.net/WantFlyDaCheng/article/details/100078782 一.框架是重点,但别让人感觉你只会山寨别人的代码 二.别单纯看单 ...

  6. python爬虫网页解析之lxml模块

    08.06自我总结 python爬虫网页解析之lxml模块 一.模块的安装 windows系统下的安装: 方法一:pip3 install lxml 方法二:下载对应系统版本的wheel文件:http ...

  7. mac pro下iterm快捷键(转)

    标签 新建标签:command + t 关闭标签:command + w 切换标签:command + 数字 command + 左右方向键 切换全屏:command + enter 查找:comma ...

  8. JMeter压测“java.net.BindException: Address already in use: connect”解决方法

    之前在windows机上用JMeter压测,50并发下出现大量接口报“java.net.BindException: Address already in use: connect”错误. 从字面的意 ...

  9. C#实现Java的DigestUtils.sha256Hex

    代码地址:DotNetCore_Practice/JavaToC#/DigestUtils at master · PuzzledAlien/DotNetCore_Practice public cl ...

  10. RabbitMQ的第一次亲密接触

    企业应用系统,如果系统之间的通信.集成与整合,尤其当面临异构系统时,那么需要分布式的调用与通信.系统中一般会有很多对实时性要求不高但零零碎碎且耗时的地方,比如发送短信,邮件提醒,记录用户操作日志等,在 ...