如果不小心网友来到了这里请网友自动飘走,浪费你们时间表示歉意。该系列博客的目的是:想作为自律工具和朋友一起每天刷几道题作为打卡督促的功能,没有什么可参考学习的东西,也不是刷博客量充大佬的目的
题号:1006
var clumsy = function (N) {
let stack = [], symbols = ['*', '/', '+', '-']
while (N > 0) {
if (stack.length == 0) {
stack.push(N)
} else {
let _symbol = symbols.shift()
if (_symbol === '*') {
stack.push(stack.pop() * N)
} else if (_symbol === '/') {
//有个小问题可能要注意:正负数的floor和我一开始的认识不一样
//floor不管正负其实都是取左边的值,但是题意的意思不是,题意
//的意思是负数要左取,整数要右取
// let pop = stack.pop()
// if (pop > 0) {
// stack.push(Math.floor(pop/N))
// } else {
// stack.push(Math.ceil(pop/N))
// }
//稍微调整下代码
let pop = stack.pop()
if (pop > 0) {
stack.push(Math.floor(pop/N))
} else {
stack.push(-Math.floor(-pop/N))
}
} else if (_symbol === '+') {
stack.push(N)
} else {
stack.push(-N)
}
symbols.push(_symbol)
}
N -= 1
}
let result = stack.reduce((total, curVal) => {
return total + curVal
})
return result
};
题号:150
var evalRPN = function (tokens) {
let symbols = ['*', '/', '+', '-'],stack = []
for (let i = 0; i < tokens.length; i++) {
let ele = tokens[i]
if (symbols.includes(ele)) {
//运算符开始计算
let num2 = stack.pop()
let num1 = stack.pop()
switch (ele) {
case '*':
stack.push(num1 * num2)
break;
case '/':
stack.push(parseInt(num1/num2))
break;
case '+':
stack.push(num1 + num2)
break;
case '-':
stack.push(num1 - num2)
break;
default:
break;
}
} else {
//数字压栈
stack.push(parseInt(ele))
}
}
return stack.pop()
};
题号:227
var calculate = function (s) {
//numStr用来记录数字字符串
//result用来压栈运算之后的结果,最后result中都是乘除之后的结果相加即可
//op记录最近的一个元素符号:如果是+那么当前数字直接放入result中如果是-就取
//反放入,如果是 * /就取出上一个result记录的数字和当前的数字计算然后放入result
let result = [], numStr = "", symbols = ['*', '/', '+', '-'], op = '+'
let helper = (ele) => {
if (ele === "") {
return
}
switch (ele) {
case '*':
result.push(result.pop() * result.pop())
break;
case '/':
let num2 = result.pop()
let num1 = result.pop()
result.push(parseInt(num1 / num2))
break;
case '+':
result.push(result.pop())
break;
case '-':
result.push(-result.pop())
break;
default:
break;
}
op = ''
}
for (let i = 0; i < s.length; i++) {
let ele = s[i]
if (ele === '') {
//空格
if (numStr.length != 0) {
result.push(parseInt(numStr))
numStr = ""
helper(op)
}
continue;
} else if (symbols.includes(ele)) {
//运算符
if (numStr.length != 0) {
result.push(parseInt(numStr))
numStr = ""
helper(op)
}
op = ele
} else {
//数字
numStr += ele
}
}
//最后一个可能存在的数字
if (numStr.length != 0) {
result.push(parseInt(numStr))
numStr = ""
helper(op)
}
return result.reduce((total, curVal) => {
return total + curVal
})
};