# 2.两数相加
题
解
- 题 (opens new window)
- 两数逆序排列,链表,长度不一定,返回同形式的和
function ListNode(val, next) { this.val = val; this.next = next; } const l1 = new ListNode( 2, new ListNode( 4, new ListNode(3) ) ) const l2 = new ListNode( 5, new ListNode( 6, new ListNode(4) ) ) addTwoNumbers(l1, l2); // 链表:7,0,8复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 4.找中位数
题
插入排序
原生排序
- 给两个正序(从小到大)数组,求中位数
const nums1 = [1,3], nums2 = [2] console.log(findMedianSortedArrays(nums1, nums2)) // 2 // 合并数组 = [1,2,3] ,中位数 2复制成功
1
2
3
4
2
3
4
- 如果是两个,就要两个的和/2
# 5.最长回文字符串
题
解
- 题 (opens new window)一个字符串,求出最长回文
const s = "babad"; console.log(longestPalindrome(s)) // "bab" // "aba" 同样是符合题意的答案。复制成功
1
2
3
4
2
3
4
# 10.正则匹配
模拟正则匹配
解
认真解
- 题给定正则表达式,和一个字符串,看正则是否能匹配完整的字符串。模拟'.'和'*'
const s = "aa", p = "a"; console.log(isMatch(s, p)); // false // "a" 无法匹配 "aa" 整个字符串。复制成功
1
2
3
4
2
3
4
const s = "aa", p = "a*"; console.log(isMatch(s, p)); // true // 因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。复制成功
1
2
3
4
2
3
4
# 11.盛最多水容器
题
解
双指针
双指针简化
- 题 (opens new window)给一个数组,排列在x轴,求最大面积
const arr = [1,8,6,2,5,4,8,3,7] console.log((maxArea(arr))); // 49 // 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。复制成功
1
2
3
4
2
3
4
# 20.括号匹配
题
栈解
巧用括号
- 左右括号匹配且出现顺序正确
- s 仅由括号 '()[]{}' 组成
const s = "()[]{}" console.log(isValid(s)); // 输出:true复制成功
1
2
3
2
3
const s = "([)]" console.log(isValid(s)); // 输出:false复制成功
1
2
3
2
3
# 9.回文整数
题
双指针解
正则
- 一个数字是回文
const x = 121; console.log(isPalindrome(x)); // 输出:true复制成功
1
2
3
2
3
# 12.整数转罗马数字
题
贪心解
- 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
/* 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 IV 4 IX 9 XL 40 XC 90 CD 400 CM 900 /*复制成功
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- 小的在大的左边代表减多少
const num = 4 console.log(intToRoman(num)); // 输出: "IV"复制成功
1
2
3
2
3
# 13.罗马转数字
题
解
巧用倒序
- 同上,倒过来而已
const s = "III"; console.log(romanToInt(s)); // 输出: 3复制成功
1
2
3
2
3
# 22.括号生成
题
解
- 给一个数字i,生成i个括号,并且要符合规范的所有组合方式
const n = 3 console.log(generateParenthesis(n)); // 输出:["((()))","(()())","(())()","()(())","()()()"]复制成功
1
2
3
2
3
# 25. K 个一组翻转链表
题
解
- 给一个链表,以及指定要翻转的位数。
const head = [1,2,3,4,5], k = 2 console.log(reverseKGroup(head, k)); // 链表形式 // 输出:[2,1,4,3,5]复制成功
1
2
3
2
3
# 27.移除元素
题
解
- 不用额外的数组空间,在原数组进行删除指定元素
const nums = [3,2,2,3], val = 3; console.log(removeElement(nums, val)); // 输出:2, nums = [2,2]复制成功
1
2
3
2
3
# 24.两两交换链表
题
解
- 链表两两交换
const head = [1,2,3,4] console.log(swapPairs(head)); // 输出:[2,1,4,3]复制成功
1
2
3
2
3
# 504. 七进制数
题
解
原生计算
const num = 100; console.log(convertToBase7(num)); // 输出: "202"复制成功
1
2
3
2
3
# 459. 重复的子字符串
题
解
const s = "abab" console.log(repeatedSubstringPattern(s)); // 输出: true // 解释: 可由子串 "ab" 重复两次构成。复制成功
1
2
3
4
2
3
4
# 1154.一年中的第几天
题
解
- 求今天是今年的第几天
- 四年一润,百年不润,四百年再润,
# 75. 颜色分类
题
解
解2
原生解
- 将只有[0, 1, 2] 的数组进行排序
const nums = [2,0,2,1,1,0] console.log(sortColors(nums)); // 输出:[0,0,1,1,2,2]复制成功
1
2
3
2
3
# 43. 字符串相乘
题
解
- 纯字符串,大数相乘
const n1 = '123'; const n2 = '456'; console.log(multiply(n1, n2)); // 56088复制成功
1
2
3
2
3
# 71. 简化路径
解
解
// 始终以斜杠 '/' 开头。 // 两个目录名之间必须只有一个斜杠 '/' 。 // 最后一个目录名(如果存在)不能 以 '/' 结尾。 // 此外,路径仅包含从根目录到目标文件或目录的路径上的目录(即,不含 '.' 或 '..')。 const path = "/home/" console.log(simplifyPath(path)); // 输出:"/home"复制成功
1
2
3
4
5
6
7
2
3
4
5
6
7
# 227. 基本计算器 II
题
解
- 只有加减乘除的表达式进行计算,禁止使用eval
# 161. 相隔为 1 的编辑距离
题
解
- 只能操作一次,且必须操作一次,增删改一个字符
const s = "ab"; const t = "acd"; console.log(isOneEditDistance(s, t)); // 输出: true复制成功
1
2
3
4
2
3
4
# 46. 全排列,回溯,递归
题
解
const nums = [1,2,3]; console.log(permute(nums)); // 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]复制成功
1
2
3
2
3
# 441. 排列硬币
题
解
- 第一列需要1个硬币,第n列需要n个硬币,求给的硬币能排满几列
const n = 5 console.log(arrangeCoins(n)); // 输出:2复制成功
1
2
3
2
3
v1.4.16