leetcode【毎日1題】快楽数java


私のleetcodeコードはすでに私のgithttps://github.com/ragezor/leetcode
問題を解く
アルゴリズムを記述して,1つの数nが快楽数であるか否かを判断する.
「快楽数」は、正の整数に対して、その数を各位置の数字の二乗和に置き換えるたびに、この数が1になるまで繰り返し、無限ループである可能性がありますが、常に1にならないまで繰り返します.1に変えることができれば、この数が快楽数です.
nが快楽数ならTrueに戻る;いいえ、Falseを返します.
例:
19true12 + 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