LeetCode OJ -Happy Number

题目链接:https://leetcode.com/problems/happy-number/

题目理解:实现isHappy函数,判断一个正整数是否为happy数

  happy数:计算要判断的数的每一位的平方和,平方和为1则为happy数,不为1则将原数替换为此平方和,继续上述步骤,直到等于1(为happy数),或者进入不包含1的无限循环(非happy数)。

  测试用例:19为happy数:

      

解题思路:

定义set集合存每次计算得到的需判断数n,循环计算新的原数n,终止条件为n等于1或者set中出现重复的数字。循环体:将n插入到set中,循环取n的每一位计算其平方和,并将n等于这个平方和。最后循环结束,如果n等于1,则原数为happy数,否则不是。

代码:

 1 class Solution {
 2 public:
 3     bool isHappy(int n) {
 4     set<int> result;
 5     int re = 0;
 6     while(n!=1&&!result.count(n)){
 7        result.insert(n);
 8        re = 0;
 9         while(n){
10             int a = n%10;
11             re+=a*a;
12             n = n/10;
13         }
14         n = re;
15     }
16     if(n==1) return true;
17     else return false;
18     }
19 };
View Code

卡住的点:

  1. 判断是否出现不为1的死循环,需要记录每次的原数,循环终止条件为原数为1,或者原数在记录的集合中已存在,即出现重复。
  2. 现写的代码结构中,将原数n插入到集合中,这步应在while循环刚进入时插入,不能在循环体最后插入。
原文地址:https://www.cnblogs.com/shuyingsoaring/p/5367647.html