JS算法-快乐数

简介: JS算法-快乐数

题目


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


题解


第一种


函数 isHappy 接收一个正整数 n,首先将 n 赋值给变量 low,将 chgNumb(n) 的结果赋值给变量 fast。然后进入一个 while 循环,判断 fast 是否等于 1 或者 low 是否等于 fast 的平方和。如果不满足条件,则将 low 的值更新为 chgNumb(low),将 fast 的值更新为 chgNumb(chgNumb(fast))。其中 chgNumb 函数的作用是将一个数字的每个位上的数字平方后相加,得到的结果,循环结束后,如果 fast 等于 1,则说明 n 是快乐数,返回 true,否则返回 false

var isHappy = function (n) {
  var low = n;
  var fast = chgNumb(n);
  while (fast != 1 && low != fast) {
    low = chgNumb(low);
    fast = chgNumb(chgNumb(fast));
  }
  return fast === 1;
};
function chgNumb(numb) {
  var sum = 0;
  while (numb > 0) {
    sum = sum + (numb % 10) * (numb % 10);
    numb = Math.floor(numb / 10);
  }
  return sum;
}


第二种


我们先初始化一个空的哈希表map,然后使用while循环,判断当前数字n是否等于1,如果是,则返回true,表示该数是快乐数。如果不是,则进行下一步操作,判断当前数字n是否已经在哈希表map中出现过,如果是,则说明出现了循环,返回false,表示该数不是快乐数。如果没有出现过,则将该数字添加到哈希表map中,将当前数字n转换成字符串,再将字符串按位拆分成数组arr,初始化一个变量temp,用于记录数字每个位数的平方和,遍历数组arr,计算每个位数的平方,并将平方结果加到temp中,将temp赋值给n,进入下一轮循环,最终,如果函数执行完while循环后还没有返回true或false,说明出现了异常,可以返回false,表示该数不是快乐数

var isHappy = function (n) {
  let map = {};
  while (n !== 1) {
    let temp = 0;
    if (map[n]) return false;
    map[n] = 1;
    const arr = String(n).split("");
    for (let i = 0; i < arr.length; i++) {
      temp += parseInt(arr[i]) * parseInt(arr[i]);
    }
    n = temp;
  }
  return true;
};
相关文章
|
2月前
|
算法 JavaScript 前端开发
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(下)
至于分发?我们可以参考一下市面上已有的一些概念做一下对比,下面是笼统的一个网络服务器的TPS预估值,也就是说彩票服务器在1秒内可以处理的最大请求数:
|
2月前
|
数据采集 算法 JavaScript
彩票中奖率的真相:用 JavaScript 看透彩票背后的随机算法(上)
原本这篇文章是打算叫「假如我是彩票系统开发者」,但细想一下,如果在文章中引用太多的 JavaScript 的话,反而不是那么纯粹,毕竟也只是我的一厢情愿,彩票开发也不全如本文所讲,有所误导的话便也是得不偿失了。
|
17天前
|
算法
优选算法|【双指针】|202.快乐数
优选算法|【双指针】|202.快乐数
|
1月前
|
缓存 JavaScript 算法
Vue.js中的diff算法:让虚拟DOM更高效
Vue.js中的diff算法:让虚拟DOM更高效
|
3月前
|
算法 JavaScript
|
3月前
|
算法 JavaScript
|
3月前
|
算法 JavaScript
JS算法-二叉树的右视图
JS算法-二叉树的右视图
|
3月前
|
算法 JavaScript
|
4月前
|
算法 JavaScript 前端开发
JavaScript算法和数据结构:写一个二分查找的函数。
JavaScript算法和数据结构:写一个二分查找的函数。
32 0
|
4月前
|
消息中间件 算法 JavaScript
JavaScript算法和数据结构:描述一下栈和队列的特点及应用场景。
JavaScript算法和数据结构:描述一下栈和队列的特点及应用场景。
40 0