📜  javascript leetcode 解决方案 - Javascript (1)

📅  最后修改于: 2023-12-03 15:31:37.714000             🧑  作者: Mango

Javascript Leetcode 解决方案

如果你已经熟悉 Javascript 并且正在练习 Leetcode 的题目,那么这篇文章将为你提供一些 Javascript 解题方案。以下是一些常见的 Leetcode 问题及其解决方案。

数组问题
两数之和(Two Sum)
题目描述

给定一个整数数组 nums 和一个目标值 target,请在数组中找出和为目标值的两个整数。

解决方案

用一个哈希表,遍历数组,将当前值作为 key,索引号作为 value 存入哈希表。当遍历到一个值时,查找 target - 当前值 是否存在于哈希表中,如果存在,返回其索引号即可。

var twoSum = function(nums, target) {
    let hash = new Map();
    for (let i = 0; i < nums.length; i++) {
        let another = target - nums[i];
        if (hash.has(another)) {
            return [hash.get(another), i];
        }
        hash.set(nums[i], i);
    }
    return [];
};
链表问题
反转链表(Reverse Linked List)
题目描述

反转一个单链表。

解决方案

迭代式解法:使用一个 pre 节点和一个 cur 节点,分别表示当前节点和它的前一个节点,在循环中进行链表反转。

var reverseList = function(head) {
    let pre = null;
    let cur = head;
    while(cur !== null) {
        let tmp = cur.next;
        cur.next = pre;
        pre = cur;
        cur = tmp;
    }
    return pre;
};

递归式解法:

var reverseList = function(head) {
    if (head === null || head.next === null) {
        return head;
    }
    let p = reverseList(head.next);
    head.next.next = head;
    head.next = null;
    return p;
};
字符串问题
字符串转换整数 (atoi)
题目描述

实现函数 atoi,把字符串转换成整数。

解决方案

首先去除字符串开头的空格,判断第一个字符是否为'-', '+' 或 0-9数字。

var myAtoi = function(str) {
    if (str === "") {
        return 0;
    }
    let i = 0;
    let sign = 1;
    let base = 0;
    while (str[i] === " ") {
        i++;
    }
    if (str[i] === "-" || str[i] === "+") {
        sign = str[i++] === "-" ? -1 : 1;
    }
    while (str[i] >= "0" && str[i] <= "9") {
        base = base * 10 + (str[i++] - "0");
        if (base > 2147483647 && sign === 1) {
            return 2147483647;
        }
        if (base > 2147483648 && sign === -1) {
            return -2147483648;
        }
    }
    return base * sign;
};
树问题
二叉树的中序遍历(Binary Tree Inorder Traversal)
题目描述

给定一个二叉树的根节点,返回它的中序遍历。

解决方案

递归解法:

var inorderTraversal = function(root) {
    let results = [];
    function traverse(node) {
        if (node === null) {
            return;
        }
        traverse(node.left);
        results.push(node.val);
        traverse(node.right);
    }
    traverse(root);
    return results;
};

非递归解法:

var inorderTraversal = function(root) {
    let results = [];
    let stack = [];
    while (root !== null || stack.length !== 0) {
        while (root !== null) {
            stack.push(root);
            root = root.left;
        }
        root = stack.pop();
        results.push(root.val);
        root = root.right;
    }
    return results;
};

以上就是一些常见 Leetcode 问题的 Javascript 解决方案。希望这篇文章能够帮助到你。