标签:ack image 记录 操作 入栈 har 情况 图片 sig
2018-09-27 22:02:36
一、Basic Calculator II
问题描述:
问题求解:
sign用来保存前一个符号,用num来记录数字,如果碰到一个符号或者到达结尾,则需要进行入栈操作,这个时候需要结合符号进行相应的运算。
public int calculate(String s) { if (s == null || s.length() == 0) return 0; int res = 0; Stack<Integer> stack = new Stack<>(); char sign = ‘+‘; int num = 0; for (int i = 0; i < s.length(); i++) { if (Character.isDigit(s.charAt(i))) { num = num * 10 + s.charAt(i) - ‘0‘; } if (!Character.isDigit(s.charAt(i)) && s.charAt(i) != ‘ ‘ || i == s.length() - 1) { if (sign == ‘/‘) num = stack.pop() / num; if (sign == ‘*‘) num = stack.pop() * num; if (sign == ‘-‘) num *= -1; stack.push(num); sign = s.charAt(i); num = 0; } } while (!stack.isEmpty()) res += stack.pop(); return res; }
二、Basic Calculator
问题描述:
问题求解:
本问题中只包含了+,-和括号,首先如果只有+,-的话连Stack都不需要就可以直接遍历一遍相加就可以了。
但是如果存在括号的情况,那么就需要使用到一个Stack来对之前计算到的数字和符号进行保存。
public int calculate(String s) { if (s == null || s.length() == 0) return 0; Stack<Integer> stack = new Stack<>(); int res = 0; int sign = 1; int num = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (Character.isDigit(c)) num = num * 10 + c - ‘0‘; else if (c == ‘+‘) { res += num * sign; sign = 1; num = 0; } else if (c == ‘-‘) { res += num * sign; sign = -1; num = 0; } else if (c == ‘(‘) { stack.push(res); stack.push(sign); res = 0; sign = 1; } else if (c == ‘)‘) { res += num * sign; res *= stack.pop(); res += stack.pop(); num = 0; } } if (num != 0) res += num * sign; return res; }
标签:ack image 记录 操作 入栈 har 情况 图片 sig
原文地址:https://www.cnblogs.com/TIMHY/p/9715959.html