# 练习

# 有效的括号

/*
 * @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 亲密字符串
更新时间: 12/20/2020, 4:29:51 PM