乐趣区

关于leetcode个人解题总结:leetCode第20题和第21题有效括号合并两个有序链表

1.leetCode 第 20 题
https://leetcode-cn.com/probl…

 给定一个只包含 '(',')','{','}','[',']' 的字符串 s,判断字符串是否无效。无效字符串需满足:左括号必须用雷同类型的右括号闭合。左括号必须以正确的程序闭合。
 示例 1:输出:s = "()"
输入:true

示例 2:输出:s = "()[]{}"
输入:true

示例 3:输出:s = "(]"
输入:false

示例 4:输出:s = "([)]"
输入:false

示例 5:输出:s = "{[]}"
输入:true

括号是具备对称性的
比方 '()’ 咱们就能够提前做一个映射表 {‘(‘:’)’},当检测到左括号时咱们将映射表相应的值放到栈中,持续遍历下一个字节是 ’)’,那么咱们须要判断一下他是不是和咱们栈顶的元素一样 如果一样那就是非法的

  function print(s) {
  // 因为上题说了只校验这三种括号 建设关系表
    let map = {"{": "}","[": "]","(": ")",};
    let stack = [];
    for (let i = 0; i < s.length; i++) {if (s[i] == "{" || s[i] == "[" || s[i] == "(") {stack.push(map[s[i]]);
      } else {if (s[i] !== stack.pop()) {return false;}
      }
    }
    return !stack.length;
  }

2.leetCode 第 21 题
https://leetcode-cn.com/probl…

输出:1->2->4, 1->3->4 输入:1->1->2->3->4->4
思路:
做链表一类的题就是解决链表指针的关系 这道题也不例外,两个链表合并成一个链表只须要在对应逻辑下扭转 next 的值即可。这里咱们设置一个 cur 这个值相当于穿针引线的一个角色 把两条链表交叉到一起。

function ListNode(val) {
    this.val = val;
    this.next = null;
  }
  function print(l1, l2) {let head = new ListNode("head");
    head.next = l1;
    let cur = head;
    while (l1 && l2) {if (l1.val <= l2.val) {
        cur.next = l1;
        l1 = l1.next;
      } else {
        cur.next = l2;
        l2 = l2.next;
      }
      cur = cur.next;
    }
    // 如果长度不一那么间接在前面拼接
    cur.next = l1 ? l1 : l2;
    return head.next;
  }
退出移动版