leetcode【毎日1題】快楽数java
7670 ワード
私のleetcodeコードはすでに私のgithttps://github.com/ragezor/leetcode
問題を解く
アルゴリズムを記述して,1つの数nが快楽数であるか否かを判断する.
「快楽数」は、正の整数に対して、その数を各位置の数字の二乗和に置き換えるたびに、この数が1になるまで繰り返し、無限ループである可能性がありますが、常に1にならないまで繰り返します.1に変えることができれば、この数が快楽数です.
nが快楽数ならTrueに戻る;いいえ、Falseを返します.
例:
の意見を打診
方法1:
快楽数の操作は各位を平方加算することであり、つまり最大81*n桁であり、この数が最大10のn次方は明らかに快楽数が無限に大きくなることは不可能であり、各後の1つの数は前の数で得ることができ、チェーンテーブルを連想させる.そこでこのチェーンテーブルにリングがあれば、フロイドのスローポインタで出会った位置を見つけて、彼が1であるかどうかを見て、下のコードの最初のisHappyに対応することができます.
方法2:
数ごとに直接処理し、出現したものはハシュセットを入れ、最終的には1かどうかを見て、コードに対応するisHappy 2
Javaコード
私のleetcodeコードはすでに私のgithttps://github.com/ragezor/leetcode
問題を解く
アルゴリズムを記述して,1つの数nが快楽数であるか否かを判断する.
「快楽数」は、正の整数に対して、その数を各位置の数字の二乗和に置き換えるたびに、この数が1になるまで繰り返し、無限ループである可能性がありますが、常に1にならないまで繰り返します.1に変えることができれば、この数が快楽数です.
nが快楽数ならTrueに戻る;いいえ、Falseを返します.
例:
:19
:true
:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
の意見を打診
方法1:
快楽数の操作は各位を平方加算することであり、つまり最大81*n桁であり、この数が最大10のn次方は明らかに快楽数が無限に大きくなることは不可能であり、各後の1つの数は前の数で得ることができ、チェーンテーブルを連想させる.そこでこのチェーンテーブルにリングがあれば、フロイドのスローポインタで出会った位置を見つけて、彼が1であるかどうかを見て、下のコードの最初のisHappyに対応することができます.
方法2:
数ごとに直接処理し、出現したものはハシュセットを入れ、最終的には1かどうかを見て、コードに対応するisHappy 2
Javaコード
package daily;
import java.util.HashSet;
import java.util.Set;
public class IsHappy {
//getNext ,
private int getNext(int num){
int sum=0;
while(num>0){
int d=num%10;
sum+=d*d;
num=num/10;
}
return sum;
}
//
public boolean isHappy(int n) {
int slow=n;
int fast=getNext(n);
while(fast!=1&&slow!=fast){
slow=getNext(slow);
fast=getNext(getNext(fast));
}
// 1
return fast==1;
}
//hashset
public boolean isHappy2(int n) {
Set<Integer> set=new HashSet<>();
while(n!=1&&!set.contains(n)){
set.add(n);
n=getNext(n);
}
return n==1;
}
}
私のleetcodeコードはすでに私のgithttps://github.com/ragezor/leetcode