LeetCode刷题,快乐数(202)

1,566 阅读1分钟

快乐数

对于一个正整数,每一次将该数替换为它每个位置上数字的平方和,如果重复这个过程可以得到最后的结果为1,那么就是快乐数,否则不是。

解题思路一:将题目转换为判断链表是否有环

如果遍历某个节点为1说明没环,是快乐数。如果遍历到重复的节点值,说明有环,就不是快乐数。

思路一:JS代码实现

var isHappy = function(n) {
  let p = n; // 慢指针
  let q = n; // 快指针
  do {
    p = getNext(p); // 走一步
    q = getNext(getNext(q)) // 走两步
  } while (p !== q && q !== 1);
  return q === 1; // 如果等于1代表是快乐数,如果不是,那么代表p,q相遇,所以不是。
};

var getNext = function(n){
  let squareSum = 0;
  while (n) {
    squareSum += (n % 10) * (n % 10); // 获取平方和
    n = Math.floor(n / 10); // 每循环一次,除去10,数字进一。如123 -> 12.3 -> 1.23 ,由于有小数位,所以向下取整 
  }
  return squareSum;
}