leetcode202_快乐数

1、题目描述

leetcode202_快乐数

 

 2、分析

 我本来是想着,如果是循环的话,就直接设置一个数字判断这种情况但是其实并没有将循环给判断出来。

   总的思路来说,就利用数组计算一次,该数字所有位置上的数目平方和。

   如果等于1则完成验算,如果运算次数超过三百则也停止,返回False。

   代码如下:

class Solution {
public:
    bool isHappy(int n) {
        int count=0;
        vector<int> num;
        while(n!=1){
            //num清零
            vector<int>().swap(num);
            while(n!=0){
                int num_digit = n%10;
                n = n/10;
                num.push_back(num_digit);
            }
            //求解平方和
            for(auto i : num){
                n = n + i*i; 
            }
            count++;
            if(count>=100)
                return false;
        }
        return true;
    }
};

3、例子

   别人的想法很好,其实也是跟以前的例子类似,主要就是利用快慢指针判断循环。

   参考方法:分析

   代码:

   

class Solution {
public:
    int bitSquareSum(int n) {
        int sum = 0;
        while(n > 0)
        {
            int bit = n % 10;
            sum += bit * bit;
            n = n / 10;
        }
        return sum;
    }
    
    bool isHappy(int n) {
        int slow = n, fast = n;
        do{
            slow = bitSquareSum(slow);
            fast = bitSquareSum(fast);
            fast = bitSquareSum(fast);
        }while(slow != fast);
        
        return slow == 1;
    }
};

 

上一篇:5、双指针技巧套路框架——Go语言版


下一篇:一分钟解决数据结构问题----输出该链表中倒数第k个结点