入栈 push(x);
出栈 pop();
const stack = [];// 入栈
stack.push(1);
stack.push(2);// 出栈
const item1 = stack.pop();
const item2 = stack.pop();
所有后进先出的结构。
valid-parentheses
参考视频:传送门
对于没有闭合的左括号而言,越靠后的左括号,对应的右括号越靠前
输入: "{[]}"
输出:true
/** * @param {string} s* @return {boolean} */
var isValid = function (s) {if (s.length % 2 === 1) { return false }const stack = [];for (let i = 0; i < s.length; i += 1) {const c = s[i];if (c === '(' || c === '{' || c === '[') {stack.push(c)} else {const t = stack[stack.length - 1];if ((t === '(' && c === ')') ||(t === '{' && c === '}') ||(t === '[' && c === ']')) {stack.pop();} else {return false;}}}return stack.length === 0;
};
const func1 = () => {func2();};const func2 = () => {func3();};const func3 = () => {};func1();
学习这个题之前,要先了解下什么是二叉树·~~
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } */
/** * @param {TreeNode} root* @return {number[]} */
var preorderTraversal = function (root) {const res = [];const stack = [];if (root) stack.push(root)while (stack.length) {const n = stack.pop();res.push(n.val)if (n.right) stack.push(n.right)if (n.left) stack.push(n.left)}return res
};
入栈 push(x);
、 出栈 pop();
、最后元素 stack[stack.length - 1]