LeetCode-Hash-202. Happy Number

来源:互联网 发布:网络角色去衣图 编辑:程序博客网 时间:2024/05/17 09:41

问题: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;    }    }};
0 0
原创粉丝点击