当前位置:首页 > IT技术 > 其他 > 正文

leetcode202:快乐数
2022-09-06 22:56:08

package com.mxnet;

import java.util.HashSet;

public class Solution202 {

    public static void main(String[] args) {

    }

    /**
     * 编写一个算法来判断一个数 n 是不是快乐数。
     *
     * 「快乐数」 定义为:
     * 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
     * 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
     * 如果这个过程 结果为 1,那么这个数就是快乐数。
     * 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
     * @param n
     * @return
     * 思路:
     * 1. 使用hash结构判断在生成下一个数的时候是否出现循环
     * 2. 首先使用一个函数计算改数的每个位置的平方和
     * 3. 在循环生成下一个数的时候判断是否出现循环
     * 4. 若出现 则停止,并判断是否满足快乐数定义
     * 5. 若未出现,则一直循环生成生成
     * 6. 循环结束时判断是否满足条件
     */
    public boolean isHappy(int n) {
        HashSet<Integer> integers = new HashSet<>();
        while (n != 1 && !integers.contains(n)){
            integers.add(n);
            n = getNext(n);
        }
        return n == 1;
    }

    /**
     * 给定一个数字n 计算对各位数求平方和的值
     * @param n
     * @return
     */
    public int getNext(int n){
        int total = 0;
        while (n > 0){
            int d = n % 10;
            total += d * d;
            n = n / 10;
        }
        return total;
    }
}

本文摘自 :https://www.cnblogs.com/

开通会员,享受整站包年服务立即开通 >