算法实习生

find the happy numeber

2019-10-13  本文已影响0人  STACK_ZHAO

题目描述:

编写一个算法来判断一个数是不是“快乐数”。

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

示例:

输入: 19
输出: true
解释:
1^2 +9^2 = 82
8^2 +2^2= 68
6^2 +8^2 = 100
1^2 +0^2 + 0^2 = 1

题目分析

主要思路是循环计算每一位的平方和相加,在有限次的循环下,看是否得出1来,主要问题是如何讲一个多位数分成1位一位的,很简单的方法是对10的n次方取余,然后取出每一位数的值,但是这样比较麻烦,所以主要的方法是将多位数转化为字符,然后在取出字符中的每一位,进而进行运算

c++代码

class Solution {
public:
    bool isHappy(int n) {
        string  str;
        int tmp = n;
        for(int i=0;i<6;i++)//i取6其实是有点取巧,6轮以后如果还没有收敛,那么这个数就不是快乐数,当然你只要是大于6的都可以,不过占的空间可能会更多而已
        {
            str = to_string(tmp);
            tmp = 0;
            for(auto c : str)
            {
                tmp += (c-'0') * (c-'0');
            }
            if(tmp == 1)
                return true;
        }
        return false;
    }
};
上一篇 下一篇

猜你喜欢

热点阅读