1.取整运算符(~~):这是JavaScript中的一种取整方式,它会将一个数值向下取整到最接近的整数。在这个表达式中,使用两次取整运算符可能是为了将小数部分去除,得到一个整数结果。
2. const symbolValues = new Map();
symbolValues.set('I', 1);
symbolValues.set('V', 5);
symbolValues.set('X', 10);
symbolValues.set('L', 50);
symbolValues.set('C', 100);
symbolValues.set('D', 500);
symbolValues.set('M', 1000);
这段代码创建了一个名为symbolValues的Map对象,并将罗马数字的符号和对应的数值存储在其中。具体来说,'I’对应的值是1,'V’对应的值是5,'X’对应的值是10,'L’对应的值是50,'C’对应的值是100,'D’对应的值是500,'M’对应的值是1000。
3.const pairs = new Map([ [')', '('], [']', '['], ['}', '{'] ]);
const pairs是一个Map对象,它用于存储一组括号的对应关系。每个键值对表示一个右括号和对应的左括号。具体来说,它包含了以下几个键值对:
[‘)’, ‘(’]:表示右括号’)‘对应的左括号是’('。
[‘]’, ‘[’]:表示右括号’]‘对应的左括号是’['。
[‘}’, ‘{’]:表示右括号’}‘对应的左括号是’{'。
这个Map对象可以用于检查给定的右括号是否与其对应的左括号匹配。例如,如果我们有一个右括号’)‘,我们可以通过pairs.get(’)‘)来获取对应的左括号’(',然后进行匹配操作。
4.let ch of s
“let ch of s” 是 JavaScript 中的一种语法,用于遍历字符串或数组中的元素。其中,“ch” 是一个变量名,用于表示当前遍历到的元素,“s” 是一个字符串或数组。
当遍历字符串时,可以使用以下方式:
Javascript
let s = "Hello"; for (let ch of s) { console.log(ch); }
输出结果为:
H e l l o
当遍历数组时,可以使用以下方式:
Javascript
let arr = [1, 2, 3, 4, 5]; for (let num of arr) { console.log(num); }
输出结果为:
1 2 3 4 5
5.
接4:for (let ch of s){
if (pairs.has(ch)) {
if (!stk.length || stk[stk.length - 1] !== pairs.get(ch)) {
return false;
}
stk.pop();
}
else {
stk.push(ch);
}
};
这段代码是一个用于检查字符串中括号匹配的函数。它使用了一个栈来实现匹配的逻辑。具体的实现步骤如下:
1. 遍历字符串s中的每个字符ch。
2. 如果ch是左括号,则将其压入栈stk中。
3. 如果ch是右括号,则判断栈stk是否为空,或者栈顶元素与ch对应的左括号不匹配,则返回false,表示括号不匹配。
4. 如果ch是右括号,并且栈顶元素与ch对应的左括号匹配,则将栈顶元素弹出。
5. 遍历完字符串s后,如果栈stk为空,则表示所有括号都匹配,返回true;否则,返回false。
这段代码的作用是判断一个字符串中的括号是否匹配。如果匹配,返回true;如果不匹配,返回false。
6.合并两个链表可以用
(1)递归:
递归是一种在函数内部调用自身的编程技巧。递归通常在以下情况下使用:
解决可以被分解为相同问题的子问题的情况。
解决问题的过程可以通过不断缩小问题规模来实现。
var mergeTwoLists = function(l1, l2) {
if (l1 === null) {
return l2;
} else if (l2 === null) {
return l1;
} else if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
};
(2)迭代
迭代是一种重复执行某个操作的方法,可以在满足特定条件的情况下使用。
var mergeTwoLists = function(l1, l2) {
const prehead = new ListNode(-1);
let prev = prehead;
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) {
prev.next = l1;
l1 = l1.next;
} else {
prev.next = l2;
l2 = l2.next;
}
prev = prev.next;
}
// 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
prev.next = l1 === null ? l2 : l1;
return prehead.next;
};---代码出自leetcode官方