LeetCode 202 Happy number

来源:互联网 发布:牟宗三 知乎 编辑:程序博客网 时间:2024/06/06 10:41
 

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
  • 本来以为出现重复就能判断是否进入死循环(即:判断digit root的平方和是否和输入的n重复) 但是遇到了特殊的2 ,会进入2 ,4,16,37,58,89,145,42,20,4,16,37...的循环  就加入了一个循环次数的限制 最后AC.
class Solution {public:int length(int n){int length = 0;while (n != 0){length++;n = n / 10;}return length;}int digital_root(int n,int &sum){int Length = length(n);int tail;sum = 0;while (Length--){tail = n % 10;n /= 10;sum = tail*tail + sum;}return sum;}    bool isHappy(int n){        int add=0;        int times=0;  digital_root(n,add);  while (add != 1)  {   digital_root(add, add);  if (add == n||times==9999)  return false;times++;   }  return true;    }    };
0 0