有效的字母异位词
主要思路:
- 先对a进行转换为charCodeAt机器码
- 以机器码为索引,数组大小26
- 字母没出现一次相对应的索引加一
- 对另一个字符串进行相反操作,即出现一次减一
完整代码:
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
let a='a'.charCodeAt()
let arr =new Array(26).fill(0)
for(let i=0;i<s.length;i++){
let temp = s[i].charCodeAt()-a
arr[temp]++
}
for(let j=0;j<t.length;j++){
let temp = t[j].charCodeAt()-a
arr[temp]--
}
let flag =true
arr.forEach((item)=>{
if(item!==0){
console.log(item)
flag=false
}
})
return flag
};
特别注意:
6. 三个循环复制时不要搞混操作对象
两个数组的交集
主要思路:
- 将连个数组打入集合去重
- 利用filter返回set1中含有的项
完整代码
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
let set1 = new Set()
let set2 = new Set()
nums1.forEach(item=>set1.add(item))
nums2.forEach(item=>set2.add(item))
return [...set2].filter(item=>set1.has(item))
};
#快乐数
主要思路:
- 将数字拆分基数后平方相加
- 将得到的结果存入集合
- 如此往复,直到结果唯一或结果已经在集合中出现过
- 最后得出是为1或是重复出现过
完整代码:
/**
* @param {number} n
* @return {boolean}
*/
var isHappy = function(n) {
getSum=(num)=>{
let list= num.toString().split('')
let sum=0
list.forEach(item=>{
sum+=item*item
})
return sum
}
let set=new Set()
let s=getSum(n)
while(s!==1&&!set.has(s)){
set.add(s)
s=getSum(s)
}
return s===1
};
两数之和
主要思路:
- 一遍for循环过去
- 对target-num[i]寻找,未找到就存入当前i和nums[i]
- 找到直接返回
完整代码:
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
let map = new Map([[nums[0],0]])
let len =nums.length
for(let i =1;i<len;i++){
if(map.has(target-nums[i])){
return [i,map.get(target-nums[i])]
}
map.set(nums[i],i)
}
};