这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战
1.使用vscode在编辑器中打断点,对jS进行调试
笔者之前只是在chrome中打断点,进行调试,第一次接触这个vscode的调试,决定作为技能包收录下来。
代码结构如下:
3-stack
├─ index.js
└─ test.js
index.js中的代码如下:
//index.js文件
// 使用js数组模拟栈
const stack = [];
//入栈操作
stack.push("加油");
stack.push("达摩~!");
//出栈操作
const item1 = stack.pop();
const item2 = stack.pop();
直接使用node运行js文件没办法断点,那么在vscode中如何打断点呢?
-
现在
vscode中打好断点标记,然后按f5(mac电脑是fn+5) -
项目文件夹下回出一个
.vscode的文件夹,里面launch.json是在运行文件的时候的配置,修改如下:{ // 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。 // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "pwa-node", "request": "launch", "name": "Launch Program", "skipFiles": [ "<node_internals>/**" ], "program": "${file}" } ] }"program": "${file}":我的理解就是当前文件的意思,vscode界面当前界面是哪个js文件。
-
断点后结果如下:
上图为f5后的结果,然后来详细说下上面的6个按钮:
- 点击①按钮:后程序将会运行到下一个断点处,如果没有断点,程序将会执行完毕
- 点击②按钮:程序将会一步一步的运行。
- 点击③按钮:如果代码中有函数,可以进入到函数中进行调试
- 点击④按钮:进入③中的函数调试之后,可以使用④跳出
- 点击⑤按钮:重启整个调试
- 点击6按钮:停止调试
2.什么场景下用栈?
-
需要后进先出的场景:
-
十进制转二进制:
-
-
后出来的余数反而要排到前面
-
把余数一次入栈,然后再出栈,就可以实现余数倒序输出。
-
-
判断字符串括号是否有效
-
- 观察后得知,越靠后的左括号,对应的右括号越靠前。
- 判断字符串是否正确闭合方法:从左到右遍历一个字符串,遇到左括号就入栈,遇到右括号就出栈,如果最后栈空了,就是合法
-
-
函数调用堆栈,之前写过文章,这里就不做过多介绍。
-
3.Leetcode:有效的括号:
下面来做一道关于栈的简单的算法题:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/va…
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
if (s.length %2 === 1) return false;
var stack = [];
for(let i=0;i<s.length;i++){
const everyS = s[i];
if(everyS==="(" || everyS ==="[" || everyS === "{"){
stack.push(everyS);
}else{
//栈顶元素
const stackTop = stack[stack.length - 1];
if(
(stackTop === "(" && everyS === ")") ||
(stackTop === "[" && everyS === "]") ||
(stackTop === "{" && everyS === "}")
)
{
stack.pop();
}else{
return false
}
}
}
return stack.length === 0;
};
🚀分析:
- 遍历字符串
s,遇到左括号就入栈 - 如果不是
左括号,那么就获取stack栈顶元素,让栈顶元素和当前遍历的这个everyS,是不是一对儿("()"、"[]"、"{}")- 是一对:
stack数组pop出栈 - 不是一对:返回
false
- 是一对: