ES6入门学习日记

99 阅读3分钟

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)。

数据结构stack

在这种数据结构中,数据像积木那样一层层堆起来,后面加入的数据就放在最上层。使用的时候,最上层的数据第一个被用掉,这就叫做"后进先出"。

与这种结构配套的,是一些特定的方法,主要为下面这些。

  • push:在最顶层加入数据。
  • pop:返回并移除最顶层的数据。
  • top:返回最顶层数据的值,但不移除它。
  • isempty:返回一个布尔值,表示当前stack是否为空栈。

引用自:www.ruanyifeng.com/blog/2013/1…

我的题解

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("/")
};