JavaScript刷LeetCode拿offer-栈相关题目
创始人
2024-05-06 11:26:14
0

1. 栈是什么?

在这里插入图片描述

  • 一种先进后出的数据结构;
  • JavaScript没有栈的结构;可以用array实现栈的功能
    • 入栈 push(x);
    • 出栈 pop();

在这里插入图片描述

const stack = [];// 入栈 
stack.push(1);
stack.push(2);// 出栈
const item1 = stack.pop();
const item2 = stack.pop();

2. 什么场景下用栈

所有后进先出的结构。

2.1 十进制转换为二进制:最后余数要倒叙输出才是正确二进制;

在这里插入图片描述

  • 后出来的余数反而要排到前面
  • 把余数依次入栈,然后出栈,就可以实现余数倒叙输出。

2.2 判断括号是否合法:左括号进栈,右括号出栈,栈空则合法;

在这里插入图片描述

  • 越靠后的左括号,对应的右括号越靠前
  • 左括号入栈,右括号出栈,最后栈空了就是合法的

2.3 函数调用栈:最后调用的函数,最先执行完;

在这里插入图片描述

  • 最后调用的函数,最先执行完
  • JS解释器使用栈来控制函数调用的顺序

3. leetcode: 20. 有效的括号

valid-parentheses

在这里插入图片描述

参考视频:传送门

3.1 解题思路

对于没有闭合的左括号而言,越靠后的左括号,对应的右括号越靠前

输入: "{[]}"
输出:true

3.2 解题步骤

  • 新建一个栈
  • 扫描字符串,遇左括号入栈,遇到和栈顶括号类型匹配的右括号就出栈,类型不匹配直接判定为不合法
/** * @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;
};

4. 前端与栈:JS中的函数调用栈

4.1 后进先出

    const func1 = () => {func2();};const func2 = () => {func3();};const func3 = () => {};func1();

在这里插入图片描述

5. LeetCode:144. 二叉树的前序遍历

学习这个题之前,要先了解下什么是二叉树·~~

在这里插入图片描述

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

5.1 利用栈模拟递归,改写递归

/** * 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
};

6. 栈-总结

  • 栈是一个后进先出的数据结构
  • JavaScript没有栈的结构;可以用array实现栈的功能
  • 栈常用操作: 入栈 push(x);出栈 pop();最后元素 stack[stack.length - 1]

相关内容

热门资讯

安卓系统短消息提醒,安卓系统短... 你有没有发现,手机里的短消息提醒功能有时候就像一个贴心的管家,有时候又像个爱闹腾的小孩子?今天,咱们...
安卓系统如何跳过密码,安卓系统... 你是不是也和我一样,有时候手机锁屏密码设置得太复杂,每次解锁都要费好大一番力气?别急,今天就来教你怎...
鸿蒙系统功能与安卓,功能对比与... 你知道吗?最近手机圈里可是热闹非凡呢!华为的新操作系统鸿蒙系统(HarmonyOS)一经推出,就引发...
安卓系统卡苹果系统不卡,揭秘两... 你有没有发现,身边的朋友都在争论安卓系统和苹果系统哪个更好?其实,这个问题就像是在问谁家的孩子更聪明...
安卓系统卡解决了吗,安卓系统卡... 你有没有遇到过安卓手机卡顿的问题?是不是每次打开应用都感觉像蜗牛爬行?别急,今天就来聊聊这个让人头疼...
华为安卓系统下载软件,畅享海量... 你有没有想过,手机里的系统就像是我们的大脑,而下载的软件就像是大脑里的各种功能?今天,就让我带你一起...
平板安卓7系统好吗,体验流畅与... 你有没有想过,你的平板电脑的安卓7系统到底怎么样呢?是不是觉得它既熟悉又有点陌生?别急,今天咱们就来...
鸿蒙系统和安卓10,跨时代操作... 你知道吗?最近科技圈可是炸开了锅,因为华为的新操作系统鸿蒙系统横空出世,而且它竟然和安卓10杠上了!...
苹果安卓和鸿蒙系统,三大操作系... 你有没有发现,现在的手机市场就像是一场精彩纷呈的武林大会,各路英雄齐聚一堂,各显神通?没错,说的就是...
鸿蒙怎么还原安卓系统,系统还原... 你是不是也和我一样,对鸿蒙系统里的安卓应用情有独钟呢?最近,不少小伙伴都在问,鸿蒙怎么还原安卓系统?...
荣耀10改回安卓系统,重拾纯净... 你有没有想过,你的荣耀10手机,曾经那般风光无限,如今却想要改回安卓系统呢?这可不是一件小事,得好好...
华为安卓系统设置权限,深度解析... 亲爱的手机控们,你是否曾为手机里那些层出不穷的权限请求而头疼?别急,今天就来给你详细解析一下华为安卓...
安卓刷系统的软件,探索系统升级... 你有没有遇到过手机卡顿、系统老化的问题?别急,今天就来给你安利几款超好用的安卓刷系统软件,让你的手机...
安卓系统投影怎么升级,轻松实现... 你有没有发现,你的安卓系统投影最近有点儿慢吞吞的,是不是也想给它来个升级,让它焕发新生呢?别急,今天...
安卓手机系统怎样加速,享受流畅... 你有没有发现,你的安卓手机最近变得有点“慢吞吞”的?别急,别急,今天就来给你支几招,让你的安卓手机瞬...
安卓系统怎么安装的,安卓系统安... 你有没有想过,你的安卓手机里那些神奇的APP是怎么来的呢?是不是觉得安装个APP就像变魔术一样简单?...
安卓系统下儿童编程,开启编程启... 你有没有想过,在这个科技飞速发展的时代,连小朋友也开始学习编程了呢?没错,就是那个在安卓系统下,孩子...
微信安卓系统转苹果系统,轻松实... 你有没有想过,从微信安卓系统转到苹果系统,这中间的转换过程,就像是一场说走就走的旅行,充满了未知和惊...
如何刷安卓8.0系统,安卓8.... 你有没有想过,让你的安卓手机升级到最新的8.0系统,让它焕发出全新的活力呢?别急,今天我就来给你详细...
安卓系统里查看路由,安卓系统下... 你是不是也和我一样,对家里的无线网络充满了好奇?想知道安卓手机里怎么查看路由器信息?那就跟着我一起探...