【前端算法】每日LeetCode题目练习汇总

532 阅读7分钟

LeetCode练习


01 和为 K 的最少斐波那契数字数目


题目描述【Medium】

和为 K 的最少斐波那契数字数目
给你数字 k ,请你返回和为 k 的斐波那契数字的最少数目,其中,每个斐波那契数字都可以被使用多次。
斐波那契数字定义为:F1 = 1 F2 = 1 Fn = Fn-1 + Fn-2 , 其中 n > 2 。数据保证对于给定的 k ,一定能找到可行解。
示例: 输入:k = 7 输出:2 解释:斐波那契数字为:1,1,2,3,5,8,13,…… 对于 k = 7 ,我们可以得到 2 + 5 = 7 。
示例: 输入:k = 10 输出:2 解释:对于 k = 10 ,我们可以得到 2 + 8 = 10 。


解题代码


03 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。


注意:

num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包含任何前导零。 你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

思路:

1.把字符串以“,”分成数组;
2.将2个数值,再分为数组;
3.将两个数组倒置;
4.按顺序一一做和,超过10,下一位加1;
5.将result[0]==0,的数值去掉;
6.将result2转为字符串;
1.示例:
var str= "123";
var str2 ="234";
2.拆分为数组:
arr1 = ['1','2','3'];
arr2 =['2','3','4'];
3.反序
arr1 = ['3','2','1'];
arr2 =['4','3','2'];
4.数组对应项相加,满10前一位加1,删掉当前位的十位:
result = ['7','5','3'];
5.数组反序,转字符串,结果相加
result = '357'

解题代码


04 给定长度为 2n 的数组, min(ai, bi) 总和最大。


示例 1: 输入: [1,4,3,2] 输出: 4 解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).

提示:

n 是正整数,范围在 [1, 10000].
数组中的元素范围在 [-10000, 10000].
思路

1.数组排序 2.获取分组的数量 3. 循环数组,并将内容填充到切片的数组中进行大小比较; 4.将小值相加


解题代码


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


有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1: 输入: "()" 输出: true

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

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

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

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

这题使用的堆栈的知识。栈具有先进后出的特点。堆栈具有栈顶和栈底之分。所谓入栈,就是将元素压入(push)堆栈;所谓出栈,就是将栈顶元素弹出(pop)堆栈。先入栈的一定后出栈,所以可以利用堆栈来检测符号是否正确配对。


解题代码


06 找出所有满足条件且不重复的三元组


4.给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。
示例:
//给定数组 nums = [-1, 0, 1, 2, -1, -4],
//满足要求的三元组集合为:
[
 [-1, 0, 1],
 [-1, -1, 2]
]

解题代码


07 整数转罗马数字


`罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。`
`字符          数值`
`I             1`
`V             5`
`X             10`
`L             50`
`C             100`
`D             500`
`M             1000`

例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规

则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

示例 1: 输入: 3 输出: "III" 示例 2: 输入: 4 输出: "IV" 示例 3: 输入: 9 输出: "IX" 示例 4: 输入: 58 输出: "LVIII" 解释: L = 50, V = 5, III = 3. 示例 5: 输入: 1994 输出: "MCMXCIV" 解释: M = 1000, CM = 900, XC = 90, IV = 4.


解题代码


08 盛最多水的容器


给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。

图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49


解题代码


09 找出二维数组中是否存在某值

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例:
现有矩阵 matrix 如下:

[
  [1,   4,  7, 11, 15],
  [2,   5,  8, 12, 19],
  [3,   6,  9, 16, 22],
  [10, 13, 14, 17, 24],
  [18, 21, 23, 26, 30]
]
给定 target = 5,返回 true。
给定 target = 20,返回 false。
限制:
0 <= n <= 1000
0 <= m <= 1000

解题代码


10 缺失数字


给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。

示例 1:

输入: [3,0,1] 输出: 2

示例 2:

输入: [9,6,4,2,3,5,7,0,1] 输出: 8

说明: 你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现?


解题代码

缺失数字


11 数组形式的整数加法


对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。

给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。

示例 1:
输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234
示例 2:
输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455
示例 3:
输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
示例 4:
输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
输出:[1,0,0,0,0,0,0,0,0,0,0]
解释:9999999999 + 1 = 10000000000

提示:

1 <= A.length <= 10000
0 <= A[i] <= 9
0 <= K <= 10000
如果 A.length > 1,那么 A[0] != 0

BigInt解释:

BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值。在对大整数执行数学运算时,以任意精度表示整数的能力尤为重要。使用BigInt,整数溢出将不再是问题。

与其他基本类型一样,可以使用构造函数创建BigInt。传递给BigInt()的参数将自动转换为BigInt:

BigInt("10");    // → 10n
BigInt(10);      // → 10n
BigInt(true);    // → 1n

无法转换的数据类型和值会引发异常:

BigInt(10.2);     // → RangeError
BigInt(null);     // → TypeError
BigInt("abc");    // → SyntaxError

可以直接对使用构造函数创建的BigInt执行算术操作

BigInt(10) * 10n;    // → 100n

使用严格相等运算符的操作数时,使用构造函数创建的Bigint与常规Bigint的处理方式类似

BigInt(true) === 1n;    // → true

解题代码

数组形式的整数加法