代码随想录算法训练营第六天 | 242.有效的字母异位词、349. 两个数组的交集 、202. 快乐数

242.有效的字母异位词

题目

求解

由于题目说明两字符串只包含小写字母,因此字符串中可能出现的元素只有26个小写字母,借助一个长度为26的数组存放字符串中字母出现次数即可

  • 定义一个长度为26,元素均为0的数组

  • 遍历字符串s,记录s中字母出现的次数

  • 遍历字符串t,t中每出现一个字母,在数组相应位置-1,如果是字母异位词,那么数组中的元素从不是0变为0后就不会再被访问

代码

var isAnagram = function(s, t) {
    if(s.length!==t.length){return false;}
    let res = new Array(26).fill(0);
    let base = 'a'.charCodeAt();
    for(const i of s){
        res[i.charCodeAt()-base]++;
    }
    for(const i of t){
        if(!res[i.charCodeAt()-base]){return false;}
        res[i.charCodeAt()-base]--;
    }
    return true;
};

349. 两个数组的交集

题目

求解

数组的交集即在两个数组中都出现过的元素。由于长度不固定且元素唯一,选择使用set

  • 定义一个set表示更长的数组中的元素

  • 遍历更短的数组,如果该数组中的元素出现在set中,则需返回该元素

代码

var intersection = function(nums1, nums2) {
    // nums1更长
    if(nums1.length<nums2.length){
        [nums1,nums2] = [nums2,nums1];
    }
    // 定义set
    let nums1Set = new Set(nums1);
    let res = new Set();
    for(let i=0;i<nums2.length;i++){
        nums1Set.has(nums2[i]) && res.add(nums2[i]);
    }
    return Array.from(res);
};

202. 快乐数

题目

求解

如果一个数是快乐数,那么在计算每个位置上数字的平方和时出现的结果不会重复。一旦重复,说明不是平方和

判断一个数是否出现过,使用set

如果该数出现过,不是快乐数;如果得到1,是快乐数

代码

var isHappy = function(n) {
    // 如果无限循环 那么就不是快乐数,问题变成看计算得到的和是否出现过
    // set
    let record = new Set();
    function getSum(n){
        let res = 0;
        while(n){
            res += (n%10)**2;
            n = Math.floor(n/10); // 相除并得到整数结果
        }
        return res;
    }
    while(!record.has(n) && n!==1){
        record.add(n);
        n = getSum(n);
    }
    return n===1;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值