LeetCode 202. Happy Number

来源:互联网 发布:勇敢的心 手游 知乎 编辑:程序博客网 时间:2024/06/08 18:33

一、题目

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
题意:给定一个数字,分别将数字拆为个位数,求其平方和,在拆分为个位数,再求其平方和,直到结果为1,那么n就是happy number

注意:结果为1返回true,那么什么时候返回false呢?就是当拆分个位数求平方和过程中出现无限循环?

        怎么样来判断进入死循环呢?就是每次将sum值载入到一个表中,当查询到当前sum值历史上已经出现过,直接返回false。

可以进行空间上的优化

class Solution {public:    bool isHappy(int n) {        //int count = 0;        map<int, int> mymap1;            while (true)    {                    int sum = 0;    while (n)         //将n拆分为个位数,同时求其平方和    {    //mymap.push_back(n % 10);    int temp = n%10;    sum += temp*temp;    n /= 10;    }    if (sum == 1)    {    //cout << "happy" << endl;    return true;    }    if(mymap1[sum])   //判断sum历史上出现过没    {        return false;    }    mymap1[sum]++;    //没出现过加入表中    n = sum;          //更新n进入下一轮循环       /* if (count++ > 10)    {    return false;    }*/    }    return false;    }};




0 0