快乐数(Java)

编写一个算法来判断一个数 num 是不是快乐数。

「快乐数」定义为:

对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果 可以变为  1,那么这个数就是快乐数。
如果 n 是快乐数就返回 true ;不是,则返回 false 。

示例 1:
输入:19
输出:true
解释:
1^{2} + 9^{2} = 82
8^{2} + 2^{2} = 68
6^{2} + 8^{2} = 100
1^{2} + 0^{2}0^{2} = 1

示例 2:
输入:num = 2
输出:false

提示:

1 <= n <= 2^{31} - 1

package com.loo;

import java.util.HashSet;
import java.util.Set;

public class HappyNums {

	public static void main(String[] args) {
		System.out.println(isHappyNums(19));
	}
	
	public static boolean isHappyNums(int num) {
		Set set = new HashSet();
		while (true) {
			int n = getNums(num);
			if (n == 1) {
				return true;
			}
			if (set.contains(n)) {
				return false;
			}
			set.add(n);
			num = n;
		}
	}
	
	public static int getNums(int num) {
		int sum = 0;
		while (num!=0) {
			sum += (num % 10) * (num %10);
			num /= 10;
		}
		return sum;
	}

}

时间和空间复杂度都是 O(n)

你可能感兴趣的:(算法,eclipse,java)