LeetCode题解 => 202.快乐数(四十九)

快乐数

编写一个算法来判断一个数是不是“快乐数”。

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

示例:

输入: 19
输出: true
解释: 
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

我的思路是:

  • 将传入的数字,转成字符串
  • 将字符串以逗号分割成一个一个的字段
  • 每个数字单独做平方运算
  • 最后得到的结果做加法运算,更新num
    此为一次循环

解法一(Set第一版)

const isHappy = n => {
  let set = new Set(), sum
  n += ''
  while (sum !== 1) {
    sum = 0
    for (let i = 0; i < n.length; i++) {
      sum += n[i]*n[i]
    }
    n = sum + ''
    if (set.has(sum)) return false
    set.add(sum)
  }
  return true
}

解法一优化

var isHappy = function(n) {
    const set = new Set([n]);
    while(!set.has(1)){
        n = (n+'').split('').reduce((acc,item)=> acc + (+item)**2 ,0);
        if(set.has(n)) return false;
        set.add(n);
    }
    return true
};

在这里插入图片描述

解法二(快慢指针)

待完善

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页