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

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

一、題目鏈接

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

二、題目描述

?編寫一個算法來判斷一個數(shù) n 是不是快樂數(shù)。

快樂數(shù)」?定義為

對于一個正整數(shù),每一次將該數(shù)替換為它每個位置上的數(shù)字的平方和。

然后重復(fù)這個過程直到這個數(shù)變?yōu)?1,也可能是 無限循環(huán) 但始終變不到 1。

如果這個過程 結(jié)果為?1,那么這個數(shù)就是快樂數(shù)。

如果 n 是 快樂數(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

三、題目分析

? ? ??為了存儲不重復(fù)的元素,可以使用HashSet集合(可以使用其中的contains()方法來進(jìn)行條件判斷),再編寫一個函數(shù),用來求解該數(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;
}
//通過該方法可以求出對應(yīng)數(shù)字每個位上的平方之和
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

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