算法刷题笔记-stack-四则运算
题目描述:
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。
示例 1:
输入: "2-1-1"
输出: [0, 2]
解释:
((2-1)-1) = 0
(2-(1-1)) = 2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/different-ways-to-add-parentheses
解题思路:
1、每次仅运算乘除,将运算结果入栈,
a、保留前一个运算符
b、如果前一个运算符是乘除,弹出一个数字,与当前运算,结果回送。
c、如果是减号,将当前数字取负,送进堆栈;正号,直接入栈
2、扫描结束后,对栈中所有元素求和。结束
java语言实现:
class Solution {
public static int calculate(String s) {
int res = 0;
int num = 0;
char sign = '+';
Stack<Integer> stack = new Stack<>();
char[] sarr = s.toCharArray();
for (int i = 0; i < sarr.length; i++) {
if (sarr[i] >= '0') {
num = num * 10 + sarr[i] - '0'; // 注意字符变成数字,方可参加运算,否则直接ASCII码参与运算,出错。
}
if ((sarr[i] < '0' && sarr[i] != ' ') || i == sarr.length - 1) {
if (sign == '+') {
stack.push(num);
} else if (sign == '-') {
stack.push(-num);
} else if (sign == '*' || sign == '/') {
int top = stack.pop();
stack.push(sign == '*' ? top * num : top / num);
}
sign = sarr[i];
num = 0;
}
}
while (!stack.isEmpty()) {
res += stack.pop();
}
return res;
}
public static int calculate2(String s) {
s=s.trim(); //清洗输入数据,并记得将洗过的数据回送给s
java.util.Stack<Integer> stack = new java.util.Stack<>();
// String[] nums=s.split("[-+/*]");
int left_number=0;
char fuhao_before='+'; //保存前一个符号
char fuhao;
for (int i=0;i<s.length();i++){
if (Character.isDigit(s.charAt(i))){
left_number=left_number*10+s.charAt(i)-'0';
}if(i==s.length()-1 || ! Character.isDigit(s.charAt(i))){
fuhao=s.charAt(i);
switch (fuhao_before){
case '+':
stack.push(left_number);
fuhao_before=fuhao;
break;
case '-':
stack.push(-left_number);
fuhao_before=fuhao;
break;
case '*':
stack.push(stack.pop()*left_number); //其实是右边的数
fuhao_before=fuhao;
break;
case '/':
stack.push(stack.pop()/left_number);
fuhao_before=fuhao;
break;
default:
break;
}
left_number=0; //归零
}
}
int result=0;
while (! stack.empty()){
result+=stack.pop();
}
return result;
}
}
算法刷题笔记-stack-四则运算的更多相关文章
- 《Data Structures and Algorithm Analysis in C》学习与刷题笔记
<Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...
- Python 刷题笔记
Python 刷题笔记 本文记录了我在使用python刷题的时候遇到的知识点. 目录 Python 刷题笔记 选择.填空题 基本输入输出 sys.stdin 与input 运行脚本时传入参数 Pyth ...
- PTA刷题笔记
PTA刷题记录 仓库地址: https://github.com/Haorical/Code/tree/master/PTA/GPLT 两周之内刷完GPLT L2和L3的题,持续更新,包括AK代码,坑 ...
- PAT-甲级刷题笔记和总结
本帖主要记录一些自己在刷题过程中的一些笔记,包括: 1.常用的函数 2.STL中常用方法 3.常见错误 4.其他常用方法 5.刷题过程中的常见算法:https://www.cnblogs.com/M ...
- NOI题库分治算法刷题记录
今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...
- leetcode 算法刷题(一)
今天开始刷Leetcode上面的算法题.我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法 第二题 Add Two Numbers 题目的意思:输入两个链表,这两个链表都是倒序的数字, ...
- 18.9.10 LeetCode刷题笔记
本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...
- LeetCode刷题笔记和想法(C++)
主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...
- LeetCode刷题笔记 - 12. 整数转罗马数字
学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...
随机推荐
- 如何使用iText制作中文PDF
1. 下载itextpdf.jar 基础包:http://jaist.dl.sourceforge.net/project/itext/iText/iText5.5.2/itext-5.5.2.zip ...
- PAT_A1074#Reversing Linked List
Source: PAT A1074 Reversing Linked List (25 分) Description: Given a constant K and a singly linked l ...
- 平衡二叉搜索树AVL
package com.sunshine.AlgorithmTemplate; import com.sunshine.OFFER66_SECOND.BalanceTreeNode; import c ...
- C# 几进制 转换到几进制
public string ConvertString(string value, int fromBase, int toBase) { int intValue = Convert.ToInt32 ...
- 49-python基础-python3-列表-常用列表统计函数-max()-min()-sum()
max() min() sum() 1-数字列表统计 实例: 2-字符串列表统计. 根据ASCII码大小统计字符串列表的min()和max(). 注意:sum()函数无法统计字符串列表. 实例:
- MVC:页面提交JQ动态生成的输入框的值得解决方案:
一,动态生成JS写法 <script type="text/javascript"> , , , ); function Additional() { var num ...
- C#设计模式:观察者模式(Observer Pattern)
一,什么是观察者模式(Observer Pattern)? 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).比如,当一个对象被修改时,则会自动通知它的依赖对象 二,代码 ...
- oracle中Varchar2和nvarchar2的区别
在oracle 11g下测试了下varchar2与nvarchar2这两种类型,网上有很多关于这两种类型的区别的帖子,我还是自己测试了下. varchar2(size type),size最大为400 ...
- js判断元素是否可见
dom元素是否可见可使用jq的is方法和dom的offsetParent === null方法 jq中 $(element).is(":visible") === true !!( ...
- mysql添加中文数据失败
日志信息: INFO 2015-01-13 10:44:36,078 org.springframework.beans.factory.xml.XmlBeanDefinitionReader: Lo ...