ES6入门学习日记
正则扩展
修饰符u ———>Unicode模式
修饰符y ———>“粘连”(sticky)修饰符
先跳过了…连正则都还不太懂呢...
数值的扩展
Math.imul方法返回两个数以 32 位带符号整数形式相乘的结果
字符串相乘是不是可以用这个了….
每日LeetCode
剑指 Offer 64. 求1+2+…+n
求1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
限制:
- 1 <= n <= 10000
js:
通常实现递归的时候我们都会利用条件判断语句来决定递归的出口,但由于题目的限制我们不能使用条件判断语句,那么我们是否能使用别的办法来确定递归出口呢?答案就是逻辑运算符的短路性质。
以逻辑运算符
&&为例,对于A && B这个表达式,如果 A 表达式返回False,那么A && B已经确定为 \textit{False}False ,此时不会去执行表达式 B。同理,对于逻辑运算符 ||, 对于 A || B 这个表达式,如果 A 表达式返回 \textit{True}True ,那么 A || B 已经确定为 \textit{True}True ,此时不会去执行表达式 B。利用这一特性,我们可以将判断是否为递归的出口看作 A && B 表达式中的 A 部分,递归的主体函数看作 B 部分。如果不是递归出口,则返回 \textit{True}True,并继续执行表达式 B 的部分,否则递归结束。当然,你也可以用逻辑运算符 || 给出类似的实现,这里我们只提供结合逻辑运算符 && 的递归实现。
//官方题解给了个用 && 写的. 那我写个 || 的吧
var sumNums = function(n) {
!n || (n+= sumNums(n-1))
return n;
};
简化路径
链接:leetcode-cn.com/problems/si… (或者点上一行的小标题)
思路
将path以'/'分割成数组,如 /a/./b/../../c/分割成[ '', 'a', '.', 'b', '..', '..', 'c', '' ]。新建一个栈stack为当前的路径,遍历path分割后的数组元素:
- 遇到正常的字母时,推入 stack 中 遇到 .. 时,stack 弹出最近一个路径
- 遇到 . 或者为空时,不修改当前 stack。
- 最后返回 '/' + stack.join('/') 为新的路径
引用:作者:raymond-yan 链接:leetcode-cn.com/problems/si…
顺便复习一下栈
stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out)。

在这种数据结构中,数据像积木那样一层层堆起来,后面加入的数据就放在最上层。使用的时候,最上层的数据第一个被用掉,这就叫做"后进先出"。
与这种结构配套的,是一些特定的方法,主要为下面这些。
- push:在最顶层加入数据。
- pop:返回并移除最顶层的数据。
- top:返回最顶层数据的值,但不移除它。
- isempty:返回一个布尔值,表示当前stack是否为空栈。
我的题解
var simplifyPath = function(path) {
let stack = []
let pathArray = path.split("/")
for(let item of pathArray){
if(item === '.' || item === ''){
continue;
} else if(item === '..'){
stack.pop();
} else {
stack.push(item)
}
}
return "/"+stack.join("/")
};