LeetCode 快乐数

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

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

示例:

输入: 19
输出: true
解释: 
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

思路分析:每次计算n的各个数位平方的和,如果是1,返回true,否则继续循环,直到出现循环。

class Solution {
public:
	bool isHappy(int n) {
        map<int, int> myMap;//用于标记是否出现了重复
		int tempValue, tempN;
        myMap[n] += 1;
		while (true) {
			tempValue = n;
			tempN = 0;
            //计算当前n的各个数位平方的和,放置到tempN中
			while (tempValue != 0) {
				tempN += (tempValue % 10) * (tempValue % 10);
				tempValue /= 10;
			}
			if (tempN == 1) {
				return true;
			}
			else if (++myMap[tempN] > 1) {//如果这个数之前出现过,则说明循环出现了
				return false;
			}
			n = tempN;//更新n为计算后的n
		}
		return false;
	}
};

在这里插入图片描述
在评论区翻到了一些大牛的评论。
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/88033320