zoukankan      html  css  js  c++  java
  • LeetCode202. 快乐数

    一、题目描述

    二、解法

    class Solution {
        public boolean isHappy(int n) {
            /**
             * 方法1:用Set检测循环
             */
            /*Set<Integer> set = new HashSet<>();
            while (n != 1) {
                if (set.contains(n)) { //如果存在,说明陷入了死循环
                    return false;
                }
                set.add(n);
                n = squareSum(n);
            }
            return true;*/
            /**
             * 方法2:类似于快慢指针的思想。
             *      慢指针每次做一次转换,快指针每次做两次转换
             *      如果出现死循环,那么快的指针(值)一定会追上慢的指针(值)
             *      如果没有循环重复,那么最后快慢指针也会相等,且都等于1。
             */
            int fast = squareSum(n);
            int slow = n;
            while (fast != 1 && fast != slow) {
                fast = squareSum(squareSum(fast));
                slow = squareSum(slow);
            }
            return fast == 1;
    
        }
        // 把一个数替换成每一位的平方和
        private int squareSum(int num) {
            int res = 0;
            while (num != 0) { // 一定要牢记代码实现取出各个位数字的思路
                int temp = num % 10;
                num /= 10;
                res += temp * temp;
            }
            return res;
        }
    }
  • 相关阅读:
    根据用户行为发送客服消息
    tp5链接访问
    统计每天分享次数总和
    csv中文乱码
    Jupyter Notebook命令
    Laplace(拉普拉斯)算子
    Sobel算子
    Opencv图像连通域
    Opencv常用函数讲解
    12306 Pytho抢票代码
  • 原文地址:https://www.cnblogs.com/HuangYJ/p/14117515.html
Copyright © 2011-2022 走看看