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

快樂(lè)數(shù)(Hash)
2022-09-06 22:46:14

一、題目鏈接

? ? ? ? ? ? ? ? ? ? ? ??快樂(lè)數(shù)??

二、題目描述

?編寫一個(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 。

示例 1:

輸入:n = 19

輸出:true

解釋:? ?12 + 92 = 82

82 + 22 = 68

62 + 82 = 100

12 + 02 + 02 = 1

示例 2:

輸入:n = 2

輸出:false

提示:? 1 <= n <= 231 - 1

三、題目分析

? ? ??為了存儲(chǔ)不重復(fù)的元素,可以使用HashSet集合(可以使用其中的contains()方法來(lái)進(jìn)行條件判斷),再編寫一個(gè)函數(shù),用來(lái)求解該數(shù)值每一位的平方之和。

四、核心代碼實(shí)現(xiàn)

class Solution {
public boolean isHappy(int n) {
Set<Integer> set=new HashSet<>();
while(n!=1&&!set.contains(n)){//條件:如果n不等于1并且n在set中并未存在,就將該數(shù)添加到set中
set.add(n);
n=getIndexnumber(n);//更新n的值
}
return n==1;
}
//通過(guò)該方法可以求出對(duì)應(yīng)數(shù)字每個(gè)位上的平方之和
private int getIndexnumber(int n){
int sum =0;
while(n>0){
int tem=n%10;
sum+=tem*tem;
n=n/10;
}
return sum;
}
}

本文摘自 :https://blog.51cto.com/u

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