leetcode - 必背基础题(JS版)

一、leetcode - 字符串
二、leetcode - 二进制、数学类
三、leetcode - 数组
四、leetcode - 二分查找
五、leetcode - 快慢指针
六、leetcode - 滑动窗口
七、leetcode - 矩阵
八、leetcode - 栈和队列

一、leetcode - 字符串

344. 反转字符串
/**
 * @param {character[]} s [ "h", "e", "l", "l", "o" ]
 * @return {void} [ "o", "l", "l", "e", "h" ] Do not return anything, modify s in-place instead.
 */
var reverseString = function (s) {
   
  let l = 0;
  let r = s.length - 1;
  while (l <= r) {
   
    [s[l], s[r]] = [s[r], s[l]];
    l++;
    r--;
  }
  return s;
};
9. 回文数
/**
 * @param {number} x 121
 * @return {boolean} true
 */
var isPalindrome = function (x) {
   
  let arr = x.toString();
  let len = arr.length;
  for (let i = 0; i < len / 2; i++) {
   
    console.info(arr[i] + "  " + arr[len - 1 - i]);
    if (arr[i] !== arr[len - 1 - i]) {
   
      return false;
    }
  }
  return true;
  //   return x.toString() === x.toString().split("").reverse().join("");
};
125. 验证回文串
/**
 * @param {string} s "A man, a plan, a canal: Panama"
 * @return {boolean} true
 */
var isPalindrome = function (s) {
   
  s = s.toLowerCase().replace(/[^a-z0-9]/g, "");
  let l = 0;
  let r = s.length - 1;
  while (l <= r) {
   
    if (s[l] !== s[r]) return false;
    l++;
    r--;
  }
  return true;
};
242. 有效的字母异位词

st 中每个字符出现的次数都相同,则称 st 互为字母异位词。

/**
 * @param {string} s "anagram"
 * @param {string} t "nagaram"
 * @return {boolean} true
 */
var isAnagram = function (s, t) {
   
  let sLen = s.length;
  let tLen = t.length;
  if (sLen !== tLen) return false;
  let count = {
   };
  for (let i = 0; i < sLen; i++) {
   
    count[s[i]] ? count[s[i]]++ : (count[s[i]] = 1);
    count[t[i]] ? count[t[i]]-- : (count[t[i]] = -1);
  }
  return Object.values(count).every((item) => item === 0);
};

二、leetcode - 二进制、数学类

191. 位 1 的个数
/**
 * @param {number} n - a positive integer 00000000000000000000000000001011
 * @return {number} 3 输入的二进制串 00000000000000000000000000001011 中,共有三位为 '1'。
 */
var hammingWeight = function (n) {
   
  let res = 0;
  while (n) {
   
    n = (n - 1) & n;
    res++;
  }
  return res;
};
326. 3 的幂
/**
 * @param {number} n 27
 * @return {boolean} true
 */
var isPowerOfThree = function (n) {
   
  while (n >= 3) {
   
    n = n / 3;
  }
  return n === 1;
};
136. 只出现一次的数字
相同值异或运算为0,与0进行异或运算为原值
res  运算过程
0    2^2=0
1    0^1=1
/**
 * @param {number[]} nums [2,2,1]
 * @return {number} 1
 */
var singleNumber = function (nums) {
   
  let res = nums[0];
  for (let i = 1; i < nums.length; i++) {
   
    res ^= nums[i];
  }
  return res;
};
172. 阶乘后的零
/**
 * @param {number} n n = 5
 * @return {number} 1 5! = 120 ,有一个尾随 0
 */
var trailingZeroes = function (n) {
   
  let res = 0;
  while (n > 1) {
   
    n = (n / 5) | 0;
    res += n;
  }
  return res;
};
7. 整数反转
res=-3   x=-12
res=-32  x=-1
res=-321 x=0

res=0  x=12
res=2  x=1
res=21 x=0
/**
 * @param {number} x -123/120
 * @return {number} -321/21
 */
var reverse = function (x) {
   
  let res = 0;
  let min = Math.pow(-2, 31);
  let max = Math.pow(2, 31) - 1;
  while (x) {
   
    res = res * 10 + (x % 10); // x % 10: 取10进制的个位数字
    if (res > max || res < min) return 0;
    x = (x / 10) | 0

你可能感兴趣的:(算法,visual,studio,code,javascript,leetcode)