📅  最后修改于: 2023-12-03 15:31:37.714000             🧑  作者: Mango
如果你已经熟悉 Javascript 并且正在练习 Leetcode 的题目,那么这篇文章将为你提供一些 Javascript 解题方案。以下是一些常见的 Leetcode 问题及其解决方案。
给定一个整数数组 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 [];
};
反转一个单链表。
迭代式解法:使用一个 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
,把字符串转换成整数。
首先去除字符串开头的空格,判断第一个字符是否为'-', '+' 或 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;
};
给定一个二叉树的根节点,返回它的中序遍历。
递归解法:
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 解决方案。希望这篇文章能够帮助到你。