# 练习
# 有效的括号
/*
* @lc app=leetcode.cn id=20 lang=javascript
*
* [20] 有效的括号
*/
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function (s) {
const stack = []
for (let i = 0; i < s.length; i++) {
const char = s.charAt(i)
switch (char) {
case '(':
stack.push(')')
break;
case '[':
stack.push(']')
break;
case '{':
stack.push('}')
break;
default:
if (char !== stack.pop()) {
return false
}
}
}
return stack.length === 0
};
# 二叉树的前序遍历
leetcode 144
var preorderTraversal = function (root) {
let res = []
getVal(res, root)
function getVal(arr = [], tree) {
if (tree == null) {
return
}
arr.push(tree.val)
getVal(arr, tree.left);
getVal(arr, tree.right)
}
return res
};
# 移除K位数字
leetcode 402
var removeKdigits = function (num, k) {
let stack = []
for (const n of num) {
while (k > 0 && stack.length && stack[stack.length - 1] > n) {
stack.pop()
k--
}
if (n != '0' || stack.length != 0) {
stack.push(n);
}
}
// 强制删除
while (k > 0) {
stack.pop();
k--
}
return stack.length == 0 ? "0" : stack.join('')
};
# 题目推荐
- 28 实现 strStr()
- 75 颜色分类
- 380 常数时间的插入、删除和获取随机元素
- 150 逆波兰表达式求值
- 1381 设计一个支持增量操作的栈
- 394 字符串解码
- 946 验证栈序列
另外推荐两个思考难度小,但是边界多的题目, 这种题目如果可以一次写出 bug free 的代码会很加分。
- 59 螺旋矩阵||
- 859 亲密字符串