2019.9.19 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新)
这题很容易能够想到借助一个栈来实现,用一个lastSign记录上一个符号。碰上空格,跳过;碰上数字,让上一个数字*10加上这个数字;碰上非数字且lastSign是正负,把当前数字对应的正负值入栈;碰上非数字且lastSign是乘除,把栈顶元素与当前元素做乘除再入栈。最后只需要把栈中元素全部相加即可。
我们其实也可以不用栈来实现,用result实现站内元素实时相加,用lastSign记录上一个符号,用popSum记录栈顶元素,用num记录当前数字,既可以模拟栈的过程。
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例 1:
输入: "3+2*2"
输出: 7
示例 2:
输入: " 3/2 "
输出: 1
示例 3:
输入: " 3+5 / 2 "
输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
/**
*
* Implement a basic calculator to evaluate a simple expression string.
* The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.
* 实现一个基本的计算器来计算一个简单的字符串表达式的值。
* 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
*
*/
public class BasicCalculatorII {
//不借助栈
public int calculate(String s) {
int result = 0;
int tempSum = 0;
int num = 0;
char lastSign = '+';
for(int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if(Character.isDigit(c)){
num = num * 10 + (c - '0');
}
if(i == s.length() - 1 || !Character.isDigit(c) && c != ' '){
switch (lastSign){
case '+':
result += tempSum;
tempSum = num;
break;
case '-':
result += tempSum;
tempSum = -num;
break;
case '*':
tempSum *= num;
break;
case '/':
tempSum /= num;
break;
default:
break;
}
lastSign = c;
num = 0;
}
}
return result + tempSum;
}
}
#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#