SYSTEM: ONLINE
VER. ...
SLEET LOG
SLEET'S LOG
/2025年3月24日/2 MIN READ

字符串相加、两数之和、有效的括号

JavaScript leetcode

字符串相加

给定两个字符串形式的非负整数 num1num2,计算它们的和,并同样以字符串形式返回。

示例:

输入:num1 = "11", num2 = "123"

输出:"134"

思路:最主要的是可以用 while 循环判定 while(flag || i >= 0 || j >= 0)。因为此处若两个数字长度相等且有进位,flag 为 1,但在只判定了两个字符串的长度的情况下会漏掉这个进位。

ts
function addStrings(num1: string, num2: string): string { let total = "", flag = 0, i = num1.length - 1, j = num2.length - 1; while (flag || i >= 0 || j >= 0) { const cur = Number(num1[i--] || "0") + Number(num2[j--] || "0") + flag; flag = Math.floor(cur / 10); total = (cur % 10) + total; } return total; }

两数之和

给定一个整数数组 nums 和一个整数目标值 target,请在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。

可以假设每种输入只会对应一个答案,并且不能使用两次相同的元素

示例 1:

输入:nums = [2, 7, 11, 15], target = 9

输出:[0, 1]

解释:因为 num[0] + num[1] = 9, 故返回其下标 [0, 1]

思路:注意这个题因为要返回下标,所以不能 sort 排序。跟之前 Set 的题目作比较,会发现 Map 更适合这种需要同时存储键值对的。像这里就可以利用 map 建立从值到键的映射,遍历数组元素并在 map 中查找有没有这个值,有这个值则返回其键(也就是 idx)

ts
function twoSum(nums: number[], target: number): number[] { const map = new Map(); for (let i = 0; i < nums.length; i++) { const need = target - nums[i]; if (map.has(need)) { return [map.get(need), i]; } map.set(nums[i], i); } }

有效的括号

给定一个只包括 (){}[] 的字符串 s,判断字符串是否有效。

有效字符串需要满足:

  1. 左括号必须用相同类型的右括号闭合。

  2. 左括号必须以正确的顺序闭合。

  3. 每个右括号都有一个对应的相同类型的左括号。

示例:

输入:s = "()"

输出:true

ts
const pair = { "(": ")", "[": "]", "{": "}", }; const isLeft = (value) => Object.keys(pair).find((item) => item === value); const isPair = (left, right) => pair[left] === right; function isValid(s: string): boolean { const str = s.split(""); let stack = []; for (let i = 0; i < str.length; i++) { if (isLeft(str[i])) { stack.push(str[i]); continue; } const lastLeft = stack.pop(); if (isPair(lastLeft, str[i])) { continue; } return false; } return stack.length === 0; }
Article Index