• 力扣Leetcode 202. 快乐数 -快慢指针 快乐就完事了


    快乐数

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

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

    如果 n 是快乐数就返回 True ;不是,则返回 False

    示例:

    输入:19
    输出:true
    解释:
    12 + 92 = 82
    82 + 22 = 68
    62 + 82 = 100
    12 + 02 + 02 = 1
    

    题解思路

    面向测试用例编程 能到双百( 做着玩 别当真

    class Solution {
    public:
        bool isHappy(int n) {
            int a[10] = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81};
            for(int i = 0; i < 100; i++)
            {
                int sum = 0;
                while (n != 0){
                    int t = n % 10;
                    n /= 10;
                    sum += a[t];
                }
                if(sum == 1) return true;
                n = sum;
            }
            return false;
        }
    };
    

    快慢指针(破解循环的妙招)

    若是存在循环 那必然存在一个循环环所以利用快慢指针 快的数先进入循环 慢的后进入 必然存在一种结果是快的追上慢的 此时fast == slow 所以再判断这时相等的是否是1 看他快乐不快乐

    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; // 看它快乐不快乐
        }
    };
    
  • 相关阅读:
    【STSRM12】整除
    【STSRM12】夏令营
    【BZOJ】1954: Pku3764 The xor-longest Path
    Faster-rcnn实现目标检测
    反向传播算法的理解
    人工智能发展的看法
    FCN的理解
    卷积神经网络的部分知识理解
    不常见算法的介绍
    如何对模型进行优化
  • 原文地址:https://www.cnblogs.com/coderzjz/p/12809609.html
Copyright © 2020-2023  润新知