202. Happy Number
撰寫一個算法來判斷一個數字 n 是否是快樂數。
快樂數是一個通過以下過程定義的數字:
從任何一個正整數開始,用其每個數字的平方和來替換這個數字。 重複這個過程,直到這個數字等於 1(此時它將保持不變),或無限循環但不包含 1。 那些通過這個過程最終得到 1 的數字是快樂數。 如果 n 是快樂數,返回 true,否則返回 false。
範例:
輸入: n = 19 輸出: true
解釋:
輸入: n = 19 輸出: true 解釋:
Python
class Solution:
def isHappy(self, n: int) -> bool:
def getSumOfSquares(num):
sum = 0
while num > 0:
digit = num % 10
sum += digit * digit
num //= 10
return sum
slow = n
fast = getSumOfSquares(n)
while fast != 1 and slow != fast:
slow = getSumOfSquares(slow)
fast = getSumOfSquares(getSumOfSquares(fast))
return fast == 1
16.60MB, 36ms
C++
class Solution {
public:
bool isHappy(int n) {
auto getSumOfSquares = [](int num) {
int sum = 0;
while (num > 0) {
int digit = num % 10;
sum += digit * digit;
num /= 10;
}
return sum;
};
int slow = n;
int fast = getSumOfSquares(n);
while (fast != 1 && slow != fast) {
slow = getSumOfSquares(slow);
fast = getSumOfSquares(getSumOfSquares(fast));
}
return fast == 1;
}
};
7.26MB, 0ms
Javascript
/**
* @param {number} n
* @return {boolean}
*/
var isHappy = function(n) {
// Helper function to get the sum of squares of digits
const getSumOfSquares = (num) => {
let sum = 0;
while (num > 0) {
let digit = num % 10;
sum += digit * digit;
num = Math.floor(num / 10);
}
return sum;
};
let slow = n;
let fast = getSumOfSquares(n);
// Using Floyd's cycle-finding algorithm
while (fast !== 1 && slow !== fast) {
slow = getSumOfSquares(slow);
fast = getSumOfSquares(getSumOfSquares(fast));
}
return fast === 1;
};
49.48MB, 64ms