问题:https://leetcode.com/problems/happy-number/
Write an algorithm to determine if a number 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, and 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 numbers.
Example: 19 is a happy number
• 12 + 92 = 82
• 82 + 22 = 68
• 62 + 82 = 100
• 12 + 02 + 02 = 1
分析:对于int类型的数,最大的值是UINT_MAX= 429496295,是一个十位数。按每位是9计算,则最大的各个位平方和是9*9*10=810,所以可以设一个长度为900的数组存储平方和的这个值。先计算n的平方和是多少,如果是0,返回false;如果是1返回true;如果是另外的值,就在设的那个数组里记下这个值出现过,则再计算这个值的平方和,依次循环下去,如果之后的平方和在数组里再次出现过,则永远不可能是happy number了,返回false.
C++代码:
class Solution {
public:
bool isHappy(int n) {
int number[900] = {0};
if (n == 0) return false;
if (n == 1) return true;
int temp = n;
int i=0;
int sum = 0;
while (1) {
while (temp>=1) {
int t = temp%10;
temp = temp / 10;
sum += t*t;
}
if (sum == 1) return true;
if (number[sum] == 1) return false;
else
number[sum] = 1;
temp = sum;
sum = 0;
}
}
};