js算法归纳总结

70 阅读1分钟

1.求和(1-100的求和)

function sum(n) {
  if (n === 1) return 1;
  return sum(n - 1) + n;
}

2.斐波拉契数列

1,1,2,3,5,8,13,21,34,55,89...求第 n 项 后一个的值等于前两个加起来

function sum(n) {
  if (n === 1 || n===2) return 1;
  return sum(n - 1) + sum(n - 2);
}

3.爬楼梯

有一个楼梯,你一次只能往上走一阶或者两阶。请编写函数 climbStairs,它接受一个整数 n 作为参数,表示这个楼梯有多少阶。请你返回一个整数,表示这个楼梯一共有多少种走法
不难发现这道题思想其实是斐波那契数列

function climbStairs(n) {
  return n < 3 ? n : climbStairs(n - 1) + climbStairs(n - 2)
}

4.深拷贝

原理: clone(o) = new Object; 返回一个对象

function clone(o) {
  var temp = {}
  for (var key in o) {
    if (typeof o[key] == 'object') {
      temp[key] = clone(o[key])
    } else {
      temp[key] = o[key]
    }
  } return temp
}

5.字符串处理

回文字符串
1.  //判断回文字符串
1.  function palindrome(str) {
1.    var reg = /[\W\_]/g;
1.    var str0 = str.toLowerCase().replace(reg, "");
1.    var str1 = str0.split("").reverse().join("");
1.    return str0 === str1;
1.  }
翻转字符串
  function reverseString(str) {
      return str.split("").reverse().join("");
  }
字符串中出现最多次数的字符
function findMaxDuplicateChar(str) {
  var cnt = {}, //用来记录所有的字符的出现频次
      c = ''; //用来记录最大频次的字符
  for (var i = 0; i < str.length; i++) {
    var ci = str[i];
    if (!cnt[ci]) {
      cnt[ci] = 1;
    } else {
      cnt[ci]++;
    }
    if (c == '' || cnt[ci] > cnt[c]) {
      c = ci;
    }
  }
  console.log(cnt)
  return c;
}

6.数组方法

数组去重
   // 对比法
  function uniqueArray(arr) {
  var temp = [];
  for (var i = 0; i < arr.length; i++) {
  if (temp.indexOf(arr[i]) == -1) {
  temp.push(arr[i]);
  }
  }
  return temp;
  // 利用数组的set方法去重
  return Array.from(new Set(arr));