我是初次刷算法的小白,计划每日打卡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++
};
};