LeetCode202:Happy Number
一、题目地址: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
三、解题思路:
Hide Tage: Hash Table & Math
1、The range int depends on the mechine you are using;16-bit ints,which lie between -32768 and +32767,are common,as are 32-bit ints.
------《the C programminglanguage》. I read this book recently.
2、假如是32-bit int,最大为2的32次方,2的10次方是1024,估算为1000,那么2的30次方大约为1000 000 000,但比这个数大,可以推断2的32次方大约为
4000 000 000.总之,2的32次方用十进制表示不会超过10位数。假如每位数字都是最大为9,sum of the squares of its digits最大为:(9*9)*10=810.
为什么要做以上的估算的,Hash Table!
3、题目要求判断一个正整数是否是Happy Number,假如是的话还能判断。假如不是呢?怎么判断一个无限循环就是无限循环呢?这里引入Hash Table,一个数只要
出现过sum of the squares of its digits不为1,我们就标记它,以后碰到的话就说明产生死循环了,OK!
四、代码:
class Solution {
public:
int GetSum(int n)
{
int sum=0;
while(n>0)
{
int t=n%10;
sum=sum+t*t;
n=n/10;
}
return sum;
}
bool isHappy(int n)
{
int HashTable[1000]={0};
int m=n;
bool flag=false;
while(true)
{
m=GetSum(m);
if(m==1)
{
flag=true;
break;
}
else if(HashTable[m]==1)
break;
else
HashTable[m]=1;
}
return flag;
}
};