leetcode做题笔记202. 快乐数

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

「快乐数」 定义为:

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

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

思路一:找规律

c语言解法

bool isHappy(int n){
    while(n>=10)
    {
        int k=0;
        while(n>0)
        {
            k+=pow(n%10,2);
            n=n/10;
        }
        n=k;
    }
    if(n==1||n==7)
    {
        return true;
    }
    else
    {
        return false;
    }
}

分析:

本题要判断是否为快乐数,根据快乐数的定义,可以列举几个例子找规律。最后找出当个位数为1或7时可验证为快乐数

思路二:双指针(快慢指针)

c++解法

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;
    }
};

分析:

除找规律外还可使用快慢指针的思想,利用指针相遇时判断是否为1循环则可判断是否为快乐数,注意两个指针需先移动再判断,否则可能出现错误

总结:

本题考察对双指针的应用,利用找规律的方法或快慢指针均可做出此题,快慢指针即两个不同速度指针判断是否有循环符合要求则输出答案

你可能感兴趣的:(双指针,笔记)