T O P

[资源分享]     LeetCode刷题笔记-简单入门题

  • By - 楼主

  • 2021-09-10 16:00:23
  • LeetCode刷题笔记

    题目来源:力扣(LeetCode)

    分割平衡字符串

    在一个 平衡字符串 中,'L' 和 'R' 字符的数量是相同的。

    给你一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。

    注意:分割得到的每个字符串都必须是平衡字符串。

    返回可以通过分割得到的平衡字符串的 最大数量 。

    // 思路:遍历 s 时用一个变量 d 维护 L 和 R 字符的数量之差,当 d=0 时就说明找到了一个平衡字符串,将答案加一
    var balancedStringSplit = function(s) {
        let ans = 0, count = 0
       for(key of s) {
           key === 'L' ? ans++ : ans--
           if(ans === 0) count++
       }
       return count
    };
    

    更多解法可查看题解 “分割平衡字符串 | LeetCode”

    独一无二的出现次数

    给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数

    如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false

    // 思路:统计字符出现字数,再判断字数是否有相同项
    var uniqueOccurrences = function(arr) {
      const obj = {}
      for(key of arr) !obj[key] ? obj[key]=1 : obj[key]++
      // 若有重复项,new Set()会去重,size必然发生改变
      return Object.values(obj).length == new Set(Object.values(obj)).size
    };
    

    更多解法可查看题解 “独一无二的出现次数 | LeetCode”

    两数之和

    给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标

    // 思路:先求出匹配项,判断匹配项是否在Map里,有就返回两个值索引,没有就Map.set
    var twoSum = function(nums, target) {
      const map = new Map()
      for(i in nums) {
        if(map.has(target - nums[i])) return [map.get(target - nums[i]), i]
        map.set(nums[i], i)
      }
      return []
    };
    
    // 栗子:nums=[2,7,1]  targer=9
    1.nums[i]=2,匹配项即为 9-2=7,此时Map.has(7)为false,即Map.set(2, 0) // 2是值,0是索引
    2.nums[i]=7,匹配项即为 9-7=2,此时Map.has(2)为true,即有匹配项,返回[0, 1] // Map.get(2)得到的就是数值2索引
    

    更多解法可查看题解 “两数之和 | LeetCode”

    回文数

    给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

    回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

    // 基础解法:利用字符串对比
    var isPalindrome = function(x) {
      //负数必然不回文 -121 -> 121-
      if (x < 0) return false;
      //个位数必然回文  2 -> 2
      if (x < 10) return true;
      //x不为0,但个位是0,必然不回文   120 -> 021
      if (x != 0 && x % 10 === 0) return false;
      return x.toString() === x.toString().split('').reverse().join('')
    };
    

    更多解法可查看题解 “回文数 | LeetCode”

    整数反转

    给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

    如果反转后整数超过 32 位的有符号整数的范围[2^31, 2^31-1] ,就返回 0。

    // 2^31-1=2147483647,-2^31=-2147483648
    // 思路:利用数组反转实现,负数加负号返回,正数直接返回即可
    var reverse = function(x) {
      let rsNum = parseInt(String(x).split('').reverse().join(''))
      if(Math.pow(-2, 31) <= rsNum && rsNum <= (Math.pow(2, 31) - 1)) return x < 0 ? -rsNum : rsNum
      return 0
    };
    

    更多解法可查看题解 “整数反转 | LeetCode”

    罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

    字符          数值
    I             1
    V             5
    X             10
    L             50
    C             100
    D             500
    M             1000
    

    例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。

    通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做IIII,而是IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为IX。

    这个特殊的规则只适用于以下六种情况:

    I可以放在V(5) 和X(10) 的左边,来表示 4 和 9。

    X可以放在L(50) 和C(100) 的左边,来表示 40 和90。

    C可以放在D(500) 和M(1000) 的左边,来表示400 和900。

    给定一个罗马数字,将其转换成整数。输入确保在 1到 3999 的范围内

    // 解题思路:先映射符号和值,然后对字符串从左到右来,如果当前字符代表的值 大于 其右边的值,就加上该值;否则就减去该值。以此类推到最右边的数,最终得到的结果即是答案。
    
    /**
     * @param {string} s
     * @return {number}
     */
    function formatRoman(char) {
      let value = null
      switch(char) {
        case 'I': 
          value = 1
          break
        case 'V': 
          value = 5
          break
        case 'X': 
          value = 10
          break
        case 'L': 
          value = 50
          break
        case 'C': 
          value = 100
          break
        case 'D': 
          value = 500
          break
        case 'M': 
          value = 1000
          break
      }
      return value
    }
    var romanToInt = function(s) {
      let count = 0
      for(let i = 0; i <= s.length - 1; i++) {
          // String.charAt([index]) 返回指定位置的字符
          let curCharValue = formatRoman(s.charAt(i))
          let nextCharValue = formatRoman(s.charAt(i+1))
          curCharValue < nextCharValue ? count -= curCharValue : count += curCharValue
      }
      return count
    };
    

    更多解法可查看题解 “罗马数字转整数 | LeetCode”

    未完待续...

    本帖子中包含资源

    您需要 登录 才可以下载,没有帐号?立即注册