算法题——打卡第一天✔

37 阅读2分钟

我是初次刷算法的小白,计划每日打卡3道题。每个题目我只是提供了我的解法。大佬们如果有更好的解法, 欢迎到评论区讨论🙌🙌

1.哈沙德数

如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number)。给你一个整数 x 。如果 x哈沙德数 ,则返回 x 各个数位上的数字之和,否则,返回-1

  1. 示例 1:

    输入: x = 18

    输出: 9

    解释:

    x 各个数位上的数字之和为 918 能被 9 整除。因此 18 是哈沙德数,答案是 9

  2. 示例 2:

    输入: x = 23

    输出: -1

    解释:

    x 各个数位上的数字之和为 523 不能被 5 整除。因此 23 不是哈沙德数,答案是 -1

  3. 提示:

    1 <= x <= 100

const fn1 = (num) => {
  const arr = num.toString().split('')
  let count = 0
  arr.forEach(item => {
    count += Number(item)
  })
  if (num % count === 0) {
    return count
  } else {
    return -1
  }
}

2.返回数组元素的最后一个元素

请你编写一段代码实现一个数组方法,使任何数组都可以调用 array.last() 方法,这个方法将返回数组最后一个元素。如果数组中没有元素,则返回 -1 。

示例 1 :

  • 输入: nums = [null, {}, 3]
  • 输出: 3
  • 解释:调用 nums.last() 后返回最后一个元素: 3。

示例 2 :

  • 输入: nums = []
  • 输出: -1
  • 解释: 因为此数组没有元素,所以应该返回 -1。  

提示:

  • arr 是一个有效的 JSON 数组
  • 0 <= arr.length <= 1000
Array.prototype.last = function() {
   return  this.length? this[this.length-1]:-1
};

/**
 * const arr = [1, 2, 3];
 * arr.last(); // 3
 */

3. 计数器

给定一个整型参数 n,请你编写并返回一个 counter 函数。这个 counter 函数最初返回 n,每次调用它时会返回前一个值加 1 的值 ( nn + 1n + 2 ,等等)。

示例 1:

  • 输入: n = 10 ["call","call","call"]
  • 输出: [10,11,12]
  • 解释:
    • counter() = 10 // 第一次调用 counter(),返回 n。
    • counter() = 11 // 返回上次调用的值加 1。
    • counter() = 12 // 返回上次调用的值加 1。

示例 2:

  • 输入:n = -2 ["call","call","call","call","call"]
  • 输出: [-2,-1,0,1,2]
  • 解释: counter() 最初返回 -2。然后在每个后续调用后增加 1。
var createCounter = function(n) {

    let count = n

 // return 闭包函数,返回的函数实际上是一个闭包,它会在每次被调用时返回递增的值,并且将该值存储在自己的作用域中先会返回 n,

  // 然后再次调用会使用作用域中的n再次++

    return function() {

       return count++

    };

};