20200403
Write an algorithm to determine if a number is "happy".
A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.
Example:
Input: 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
Javascript:
/**
* @param {number} n
* @return {boolean}
*/
var isHappy = function(n, counter=0) {
result = false;
if(counter < 20){
//切割n并算出各个位置上数字平方后存入array数组
const array = n.toString().split("").map(n => n*n);
//数组单位加和,参数:初始值,最终值,初始Index:0
const sum = array.reduce((a, b)=> a + b, 0);
if (sum ===1 ){
result = true;
} else {
counter++;
isHappy(sum, counter);
}
return result;
}
};
sample 44 ms submission
Setを活用したバージョン
/**
* @param {number} n
* @return {boolean}
*/
var isHappy = function(n) {
let seen = new Set();
let current = n;
while(true) {
current = String(current).split('').reduce((acc, number) => (acc + Number(number)**2), 0)
if(current === 1) {
return true;
} else if(seen.has(current)) {
return false;
} else {
seen.add(current)
}
}
};