488. 快乐数

作者: 和蔼的zhxing | 来源:发表于2017-11-26 18:33 被阅读0次

写一个算法来判断一个数是不是"快乐数"。

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

1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

按照题目中说的一共有两种情况,一种情况是一直进行上述操作,然后得到1,要么是无限循环得不到1,那么就按照这个思路,首先while循环判断是否能得到1,然后每一步再判断是否有循环(若有循环,则即是有重复的数,用vector<int>结合find来判断),这样就是可以的:
顺便复习一下std::find函数,在头文件algorithm里。
std::find

template <class InputIterator, class T>
   InputIterator find (InputIterator first, InputIterator last, const T& val);
//接受一对迭代器和一个查找目标,返回一个迭代器,如果没找到返回尾后。
   bool isHappy(int n)
    {
        if(n<=0)   //小于零的话直接返回错误
        return false;
        vector<int> res;
        
        while(n!=1)      //得不到1 的话就一直循环
        {
            int num=0;    //存算出来的数
            while(n>0)
            {
            num+=(n%10)*(n%10);
            n/=10;
            }     //逐位求平方和,从低位往高位求
            
            if(find(res.begin(),res.end(),num)==res.end())   
            //这是std::find接受一堆迭代器和一个目标,是一个模板函数
            {
                res.push_back(num);  //如果没找到,就把这个数放进去
            }
            else
            return false;   //如果能找到的话说明产生循环了,则肯定更不是快乐数
            n=num;
        }
        //n==1了才可能跳出循环,返回true
        return true;
    }

思路二,我一开始也想着算几个数试一下,身边没有笔,就没算,后来一查果然无论是快乐或者不快乐,最后都会归结到1或者4,也就是说,只要是一个整数,一直循环进行这个操作,不是最后得到的不是1就是4,那么这样就简单多了,直接循环,得到1或者4跳出,然后根据是1或者4判断是否是快乐数:
code:

  bool isHappy(int n) {
        if(n<=0)
        return false;
        while(n!=1&&n!=4)
        {
            int num=0;
            while(n>0)
            {
            num+=(n%10)*(n%10);
            n/=10;
            }
            n=num;
        }
        return n==1;
        // write your code here
    }

over

相关文章

  • 488. 快乐数

    写一个算法来判断一个数是不是"快乐数"。 一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位...

  • 488.珍珠

    昨日的泪水 今日的汗水 时间会帮你 把它们串成一串 美丽的珍珠 爱拼才会赢 你要做的只是 不抱怨 不灰心 不沮丧 ...

  • 488.本心

    今晚散步的时候,跟同事聊起了周围的工作环境和氛围,大家都觉得周围的工作氛围不是很好,因为这一轮公司竞聘中,年轻人在...

  • 快乐数

    编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的...

  • 快乐数

    描述 写一个算法来判断一个数是不是"快乐数"。 一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他...

  • 快乐数

  • 快乐数

    题目: 题目的理解: 分解整数,平方和,分解整数。 python实现 想看最优解法移步此处 提交 // END 当...

  • 快乐数

    题目描述:编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位...

  • 快乐数

    题目描述 https://leetcode-cn.com/problems/happy-number/ 解 思路 ...

  • 快乐数

    202. 快乐数[https://leetcode.cn/problems/happy-number/] 题目编写...

网友评论

    本文标题:488. 快乐数

    本文链接:https://www.haomeiwen.com/subject/pvflbxtx.html