202.Happy Number
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:
1 2 3 4 5 6 7 Input: n = 19 Output: true Explanation: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
Example 2:
1 2 Input: n = 2 Output: false
哈希表:
时间复杂度:O(logn)
空间复杂度:O(logn)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution {public : bool isHappy (int n) { unordered_set<int > hash; int sum = 0 ; while (1 ) { while (n != 0 ) { sum += (n % 10 ) * (n % 10 ); n /= 10 ; } if (sum == 1 )return true ; if (hash.count (sum))return false ; else { hash.insert (sum); n = sum; sum = 0 ; } } } };
快慢指针:
时间复杂度:O(logn)
空间复杂度:O(1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { public : int get_next (int value) { int sum = 0 ; while (value) { sum += (value % 10 ) * (value % 10 ); value /= 10 ; } return sum; } bool isHappy (int n) { int slow = n; int fast = get_next (n); while (fast != 1 && fast != slow) { slow = get_next (slow); fast = get_next (get_next (fast)); } return fast == 1 ; } };