242 有效的字母异位词
这道题可以使用一个哈希表来记录第一个词的字母和出现的频率,再遍历第二个词,对每一个第二个词里的字母在哈希表中的频率-1,如果发现有一个字母并没有出现在哈希表中,证明第二个词中有第一个词里没有的字母,返回false。最后检查哈希表的大小,如果大小为0,返回true
var isAnagram = function(s, t) {
const map = new Map()
for (const c of s) {
if (!map.has(c)) {
map.set(c, 0)
}
map.set(c, map.get(c) + 1)
}
for (const c of t) {
if (!map.has(c)) {
return false
}
map.set(c, map.get(c) - 1)
if (map.get(c) === 0) {
map.delete(c)
}
}
if (map.size > 0) return false
return true
};
349 两个数组的交集
因为题目说到输出的每个元素应该都是唯一的,所以我们先对s1和s2用set去重,然后求他们的交集
var intersection = function(nums1, nums2) {
const res = []
const s1 = new Set(nums1)
const s2 = new Set(nums2)
s1.forEach((v) => {
if (s2.has(v)) {
res.push(v)
}
})
return res
};
202 快乐数
使用快慢指针的技巧可以巧妙的解决,因为如果有重复,其实就是出现了环。
var isHappy = function(n) {
let slow = n
let fast = n
do {
slow = calculate(slow)
fast = calculate(calculate(fast))
// 终止条件:有环,快慢指针相遇。无环,快指针到1
} while (slow !== fast && fast !== 1)
if (fast === 1) {
return true
}
return false
};
const calculate = (num) => {
let res = 0
while (num > 0) {
const digit = num % 10
res += digit * digit
num = Math.floor(num/10)
}
return res
}