內(nèi)容
編寫(xiě)一個(gè)算法來(lái)判斷一個(gè)數(shù)是不是“快樂(lè)數(shù)”哄辣。
一個(gè)“快樂(lè)數(shù)”定義為:對(duì)于一個(gè)正整數(shù)睬关,每一次將該數(shù)替換為它每個(gè)位置上的數(shù)字的平方和逮矛,然后重復(fù)這個(gè)過(guò)程直到這個(gè)數(shù)變?yōu)?1矮燎,也可能是無(wú)限循環(huán)但始終變不到 1定血。如果可以變?yōu)?1,那么這個(gè)數(shù)就是快樂(lè)數(shù)诞外。
示例:
輸入: 19
輸出: true
解釋:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
思路
這里有個(gè)規(guī)律澜沟,如果不是快樂(lè)數(shù),那么總會(huì)循環(huán)到某個(gè)數(shù)后繼續(xù)循環(huán)峡谊,所以關(guān)鍵就是記錄每次求平方和之后的數(shù)茫虽,如果出現(xiàn)第二次刊苍,那么這個(gè)數(shù)就不是快樂(lè)數(shù)
代碼
/**
這里有個(gè)規(guī)律,如果不是快樂(lè)數(shù)濒析,那么總會(huì)循環(huán)到某個(gè)數(shù)后繼續(xù)循環(huán)正什,所以關(guān)鍵就是記錄每次求平方和之后的數(shù),如果出現(xiàn)第二次号杏,那么這個(gè)數(shù)就不是快樂(lè)數(shù)
* @param {number} n
* @return {boolean}
*/
var isHappy = function (n) {
n = n.toString();
var start = n;
var sum = 0;
var map = {};
while (sum != 1) {
sum = 0;
for (var i = 0; i < start.length; i++) {
sum += Math.pow(Number(start[i]), 2);
}
if (map[sum] > 1) {
return false;
} else {
map[sum] ? map[sum]++ : map[sum] = 1;
}
if (sum == 1) {
return true;
}
if (n == sum.toString()) {
return false;
}
start = sum.toString();
}
return true;
};