参考《leetcode 题解,记录自己的 leetcode 解题之路》练脑 (一)

 知识点快速索引

层次遍历(BFS)(树的基本操作- 遍历) 投票算法  hashmap 存储已经访问过的值 使用栈来代替递归 在push的时候利用辅助栈(双栈) 因数分解 二进制表示、2的幂次方特点 位运算、异或运算、左移一位表示进位 carried变量来实现进位  滑动窗口 递归和动态规划介绍 动态规划一 动态规划二  分治法 使用双指针 dummyHead简化操作  二分查找  二分查找(二)  回溯法  矩阵旋转操作  类似桶排序  冒泡排序的时间复杂度优化  路径动态规划空间优化  爬楼梯问题介绍  爬楼梯问题   继续阅读“参考《leetcode 题解,记录自己的 leetcode 解题之路》练脑 (一)”

当年练手FreeCodeCamp中的高级算法编码题 [源码]

一、Validate US Telephone Numbers 美国电话号码正则匹配

代码如下:

function telephoneCheck(str) {
  // Good luck!
  var arr = str.match(/1?\s?\d{3}[\s-]?\d{3}[\s-]?\d{4}|1?\s?\(\d{3}\)[\s-]?\d{3}[\s-]?\d{4}/);
  return arr!==null && arr[0].length === str.length;
}


telephoneCheck("555-555-5555");

二、Record Collection 更新对象记录集

代码如下: 继续阅读“当年练手FreeCodeCamp中的高级算法编码题 [源码]”

当年练手FreeCodeCamp中的中级算法编码题 13-21 [源码]

十三、Sum All Odd Fibonacci Numbers 斐波纳契数列求和

思路
循环求和

代码如下:

function sumFibs(num) {
        var pre = 0,
            now = 1,
            next = 1,
            r = 0;
        while (pre <= num) {
            if (pre % 2 === 1) {
                r += pre;
            }
            if (now <= num && now % 2 === 1) {
                r += now;
            }
            pre = next;
            now = now + next;
            next = next + now;
        }
        return r;
}

sumFibs(4);

十四、Sum All Primes 素数求和

思路
1、同上 继续阅读“当年练手FreeCodeCamp中的中级算法编码题 13-21 [源码]”

当年练手FreeCodeCamp中的js基础算法编码题12~16 [源码]

十二、Mutations 确认数组第二个字符串所有字符是否都在第一个串中出现

思路
1、循环第二个串每个字符检查是否在第一个串中出现

代码如下:

function mutation(arr) {
  var len = arr[1].length,
      a = arr[0].toLowerCase(),
      b = arr[1].toLowerCase();
  for(var i=0;i<len;i++){
    if(a.indexOf(b.charAt(i))<0){
      return false;
    }
  }
  return true;
}

mutation(["hello", "hey"]);

十三、Falsy Bouncer 把数组中所有false, null, 0, "", undefined, 和 NaN值元素去掉

思路继续阅读“当年练手FreeCodeCamp中的js基础算法编码题12~16 [源码]”

当年练手FreeCodeCamp中的js基础算法编码题7~11 [源码]

七、Confirm the Ending 确认字符串是否以指定的串结尾

思路
1、主要是用String.prototype.substr()获取尾串是否与目标相等

代码如下:

function confirmEnding(str, target) {
  // "Never give up and good luck will find you."
  // -- Falcor
  if(target.length > str.length){
    return false;
  } else{
    if(str == target || str.substr(str.length- target.length) == target){
      return true;
    }else{
      return false;
    }
  }
}

confirmEnding("Bastian", "n");

八、Repeat a string repeat a string 重复一字符串

思路
比较简单,拼上去就行

代码如下: 继续阅读“当年练手FreeCodeCamp中的js基础算法编码题7~11 [源码]”

当年练手FreeCodeCamp中的js基础算法编码题1~6 [源码]

一、Reverse a String 字符串倒序输出

思路
1、打散成为单字符数组
2、把数组反序
3、把反序后的数组合拼成为结果字符串

代码如下:

function reverseString(str) {
  
  return str.split('').reverse().join('');
}

reverseString("hello");

二、Factorialize a Number 求一个整数的阶乘

思路
比较简单,就一个循环乘上去

代码如下:

function factorialize(num) {
  var r = 1;
  for(var i=1;i<=num;i++){
    r = r * i;
  }
  return r;
}

factorialize(5);

三、Check for Palindromes 回文检查

思路
1、先把特殊字符去掉
2、把字符串反序
3、比较顺序与序串是否相等 继续阅读“当年练手FreeCodeCamp中的js基础算法编码题1~6 [源码]”

Javascript 把 setTimeout 改成 delay,延时执行+链式调用

背景

setTimeout 多了,总是觉得这函数就差那么一点点,不是很顺手,就萌生了要改造一下此函数的念头;改成可以链式编程的,名字也更加接地气点的,就叫 delay 吧。

直接挂原型链代码如下:

/**
 * 让目标(Object)延时执行,可以链式使用
 * 
 * @param {Number} time
 * @param {Function} doSomething - 
 *                               - @param {Object} self -- 作为参数回调使用
 *                               - @param {Number} startTime -- 作为参数回调使用
 * @return {Object} 
 */
Object.prototype.delay = function (time, doSomething) {
    var self = this,
        startTime = time;
    if (self) {
        setTimeout(function () {
            doSomething(self, startTime);
        }, time);
    }
    return this;
}

链式使用例子代码如下:

继续阅读“Javascript 把 setTimeout 改成 delay,延时执行+链式调用”