Leetcode202:快乐数

文章目录


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

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

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

解法1

    public boolean isHappy(int n) {

		Set<Integer> set = new HashSet<>();
		while (true) {
		    int sum = 0;
		    while (n > 0) {
				sum += (n % 10) * (n % 10);
				n /= 10;
		    }
		    if (sum == 1) {
				return true;
		    } else if (set.contains(sum)) {
				return false;
		    } else {
				set.add(sum);
				n = sum;
		    }
		}
    }

解法2

其实这道题也可以不用set来做,我们并不需要太多的额外空间,关于非快乐数有个特点,循环的数字中必定会有4,这里就不做证明了,我也不会证明,就是利用这个性质,就可以不用set了

猜你喜欢

转载自blog.csdn.net/qq_24094489/article/details/88779160