王廷瑋|數位醫療|智慧醫療: 202. Happy Number WFU

2024年7月12日 星期五

202. Happy Number

202. Happy Number


撰寫一個算法來判斷一個數字 n 是否是快樂數。

快樂數是一個通過以下過程定義的數字:

從任何一個正整數開始,用其每個數字的平方和來替換這個數字。 重複這個過程,直到這個數字等於 1(此時它將保持不變),或無限循環但不包含 1。 那些通過這個過程最終得到 1 的數字是快樂數。 如果 n 是快樂數,返回 true,否則返回 false。

範例:

輸入: n = 19 輸出: true

解釋:

輸入: n = 19 輸出: true 解釋: 

12+92=821^2 + 9^2 = 82
82+22=688^2 + 2^2 = 68
62+82=1006^2 + 8^2 = 100
12+02+02=11^2 + 0^2 + 0^2 = 1


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