题目描述:

给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。

示例 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-四则运算的更多相关文章

  1. 《Data Structures and Algorithm Analysis in C》学习与刷题笔记

    <Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...

  2. Python 刷题笔记

    Python 刷题笔记 本文记录了我在使用python刷题的时候遇到的知识点. 目录 Python 刷题笔记 选择.填空题 基本输入输出 sys.stdin 与input 运行脚本时传入参数 Pyth ...

  3. PTA刷题笔记

    PTA刷题记录 仓库地址: https://github.com/Haorical/Code/tree/master/PTA/GPLT 两周之内刷完GPLT L2和L3的题,持续更新,包括AK代码,坑 ...

  4. PAT-甲级刷题笔记和总结

     本帖主要记录一些自己在刷题过程中的一些笔记,包括: 1.常用的函数 2.STL中常用方法 3.常见错误 4.其他常用方法 5.刷题过程中的常见算法:https://www.cnblogs.com/M ...

  5. NOI题库分治算法刷题记录

    今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...

  6. leetcode 算法刷题(一)

    今天开始刷Leetcode上面的算法题.我会更新我刷题过程中提交的代码(成功和不成功的都有)和比较好的解法 第二题 Add Two Numbers 题目的意思:输入两个链表,这两个链表都是倒序的数字, ...

  7. 18.9.10 LeetCode刷题笔记

    本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...

  8. LeetCode刷题笔记和想法(C++)

    主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...

  9. LeetCode刷题笔记 - 12. 整数转罗马数字

    学好算法很重要,然后要学好算法,大量的练习是必不可少的,LeetCode是我经常去的一个刷题网站,上面的题目非常详细,各个标签的题目都有,可以整体练习,本公众号后续会带大家做一做上面的算法题. 官方链 ...

随机推荐

  1. VB - 变量

    Cbool函数将变量转换成布尔值: Cbyte函数将变量转换为0到255之间的整数. Ccur函数.Cdbl函数和Csng函数将变量转换为浮点数值,前者只精确到小数点后四位,后两者要更加精确,数值的范 ...

  2. linux下对rpm源码手工打补丁

    前言 通常情况rpm包组件管理方式下的linux环境,常用打补丁的方式只有一种:修改spec文件定义的Patch和patch字段,其实spec文件中调用的底层命令还是patch.  因为业务需要要编译 ...

  3. bootstrap3- 导航条 - 慕课笔记

    bootstrap中的导航条 一.和导航的区别 导航条比导航多了一个条字 直接上图 导航: 导航条: 简单文字描述: 由两张图看出,导航内容比较简单,而导航条可以包含导航及其他元素,如表单,搜索框等, ...

  4. ES6中的CLASS继承

    ES6中的CLASS继承:https://www.jianshu.com/p/3d3d52b47762 es6 javascript的Class 类的继承:https://blog.csdn.net/ ...

  5. addr2line探秘 [從ip讀出程式中哪行出錯]

    addr2line探秘 在Linux下写C/C++程序的程序员,时常与Core Dump相见.在内存越界访问,收到不能处理的信号,除零等错误出现时,我们精心或不精心写就的程序就直接一命呜呼了,Core ...

  6. FZU 2060 The Sum of Sub-matrices(状态压缩DP)

    The Sum of Sub-matrices Description Seen draw a big 3*n matrix , whose entries Ai,j are all integer ...

  7. sublime中使用插件anaconda而在代码中出现方框

    这个标志是说不符合PEP8标准,比如使用了Tab做缩进:一行过长等问题. 可以在可以在 Sublime > Preferences > Package Settings > Anac ...

  8. 【学习总结】Python-3-运算符优先级

    参考:菜鸟教程-Python3运算符 运算符优先级-表 特别注意:逻辑运算符内部的优先级顺序-考点!!!! END

  9. LeetCode Array Easy 414. Third Maximum Number

    Description Given a non-empty array of integers, return the third maximum number in this array. If i ...

  10. linux c 链接详解2-定义和声明

    2定义和声明 摘自:linux c编程一站式学习 可以学会extern和static用法,头文件知识. 2.1. extern和static关键字 在上一节我们把两个程序文件放在一起编译链接,main ...