我是初次刷算法的小白,计划每日打卡3道题。每个题目我只是提供了我的解法。大佬们如果有更好的解法, 欢迎到评论区讨论🙌🙌。
1.哈沙德数
如果一个整数能够被其各个数位上的数字之和整除,则称之为 哈沙德数(Harshad number)。给你一个整数
x
。如果x
是 哈沙德数 ,则返回x
各个数位上的数字之和,否则,返回-1
-
示例 1:
输入: x = 18
输出: 9
解释:
x
各个数位上的数字之和为9
。18
能被9
整除。因此18
是哈沙德数,答案是9
。 -
示例 2:
输入: x = 23
输出: -1
解释:
x
各个数位上的数字之和为5
。23
不能被5
整除。因此23
不是哈沙德数,答案是-1
。 -
提示:
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 的值 (n
,n + 1
,n + 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++
};
};