带你读《图解算法小抄》十七、栈(1)https://developer.aliyun.com/article/1348079?groupCode=tech_library
b)逆波兰表达式求值
逆波兰表达式是一种无括号的数学表达式表示法,通过栈可以方便地求解逆波兰表达式的值。
以下是逆波兰表达式求值算法的伪代码实现:
function evaluateReversePolishNotation(tokens) { let stack = []; for (let token of tokens) { if (!isNaN(token)) { // 操作数 stack.push(Number(token)); } else { // 运算符 let operand2 = stack.pop(); let operand1 = stack.pop(); let result; switch (token) { case '+': result = operand1 + operand2; break; case '-': result = operand1 - operand2; break; case '*': result = operand1 * operand2; break; case '/': result = Math.trunc(operand1 / operand2); break; } stack.push(result); } } return stack.pop(); }
2.反转字符串
给定一个字符数组chars,将其反转,使得字符数组中的元素按照逆序排列。
示例:
输入:chars = ["h","e","l","l","o"] 输出:["o","l","l","e","h"] 解释:将字符数组反转后,得到逆序排列的字符数组为["o","l","l","e","h"]。
输入:chars = ["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"] 解释:将字符数组反转后,得到逆序排列的字符数组为["h","a","n","n","a","H"]。
1)题目分析与解题步骤:
这个问题可以使用栈来解决。我们可以遍历字符数组中的每个字符,并将其入栈,然后依次出栈得到逆序排列的字符数组。
解题步骤如下:
创建一个栈stack,用于存储字符数组中的元素。
遍历字符数组chars中的每个字符,并执行以下操作:将当前字符入栈。
创建一个空数组result,用于存储逆序排列的字符数组。
循环从栈中出栈字符,并将其添加到result数组中,直到栈为空。
返回逆序排列的字符数组result作为最终结果。
2)JavaScript解题框架:
function reverseString(chars) { let stack = new Stack(); for (let char of chars) { stack.push(char); } let result = []; while (!stack.isEmpty()) { result.push(stack.pop()); } return result; }
在这个框架中,我们首先定义了一个栈类Stack,其中包含了常用的栈操作方法。然后,我们使用栈来反转字符串。
在reverseString函数中,我们遍历字符数组chars,并将每个字符入栈。然后,我们创建一个空数组result,用于存储逆序排列的字符数组。
接下来,我们循环从栈中出栈字符,并将其添加到result数组中,直到栈为空。
最后,返回逆序排列的字符数组result作为最终结果。
带你读《图解算法小抄》十七、栈(3)https://developer.aliyun.com/article/1348077?groupCode=tech_library