202 - Happy Number
#easy
Write an algorithm to determine if a number n
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.
- 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.
Return true
if n
is a happy number, and false
if not.
Example 1:
Input: n = 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
思路
這道題目看上去貌似一道數學問題,其實並不是!
題目中說了會 無限循環,那麼也就是說求和的過程中,sum會重複出現,這對解題很重要!
當我們遇到了要快速判斷一個元素是否出現集合裡的時候,就要考慮哈希法了。
所以這道題目使用哈希法,來判斷這個sum是否重複出現,如果重複了就是return false, 否則一直找到sum為1為止。
Solution
class Solution {
public:
int getSum( int n ) {
int sum = 0;
while ( n ) {
sum += ( n % 10 ) * ( n % 10 );
n = n / 10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> set;
while ( 1 ) {
int sum = getSum(n);
if ( sum == 1 ) return true;
// 如果這個sum曾經出現過,說明已經陷入了無限循環了,立刻return false
if ( set.find(sum) != set.end() ) {
return false;
}
else {
set.insert(sum);
}
n = sum;
}
}