當(dāng)前位置:首頁(yè) > IT技術(shù) > 其他 > 正文

leetcode202:快樂(lè)數(shù)
2022-09-06 22:56:08

package com.mxnet;

import java.util.HashSet;

public class Solution202 {

    public static void main(String[] args) {

    }

    /**
     * 編寫(xiě)一個(gè)算法來(lái)判斷一個(gè)數(shù) n 是不是快樂(lè)數(shù)。
     *
     * 「快樂(lè)數(shù)」?定義為:
     * 對(duì)于一個(gè)正整數(shù),每一次將該數(shù)替換為它每個(gè)位置上的數(shù)字的平方和。
     * 然后重復(fù)這個(gè)過(guò)程直到這個(gè)數(shù)變?yōu)?1,也可能是 無(wú)限循環(huán) 但始終變不到 1。
     * 如果這個(gè)過(guò)程 結(jié)果為?1,那么這個(gè)數(shù)就是快樂(lè)數(shù)。
     * 如果 n 是 快樂(lè)數(shù) 就返回 true ;不是,則返回 false 。
     * @param n
     * @return
     * 思路:
     * 1. 使用hash結(jié)構(gòu)判斷在生成下一個(gè)數(shù)的時(shí)候是否出現(xiàn)循環(huán)
     * 2. 首先使用一個(gè)函數(shù)計(jì)算改數(shù)的每個(gè)位置的平方和
     * 3. 在循環(huán)生成下一個(gè)數(shù)的時(shí)候判斷是否出現(xiàn)循環(huán)
     * 4. 若出現(xiàn) 則停止,并判斷是否滿(mǎn)足快樂(lè)數(shù)定義
     * 5. 若未出現(xiàn),則一直循環(huán)生成生成
     * 6. 循環(huán)結(jié)束時(shí)判斷是否滿(mǎn)足條件
     */
    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;
    }

    /**
     * 給定一個(gè)數(shù)字n 計(jì)算對(duì)各位數(shù)求平方和的值
     * @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/

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >