Decade
Decade
Published on 2025-07-15 / 14 Visits
0
0

代码随想录14

202. 快乐数

已解答

简单

相关标签

premium lock icon相关企业

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

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。

  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。

  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n快乐数 就返回 true ;不是,则返回 false

 

示例 1:

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

示例 2:

输入:n = 2
输出:false

 

提示:

  • 1 <= n <= 231 - 1

很快乐哈,核心想法就是利用重复出现的数字避免反复查找

class Solution {
public:
    bool isHappy(int n) {
		set<int> repeatSum;
		int calculateNum = n;
		int sum = 0;
        //取每一位进行平方求和
        while (true) {

			//对目标数平方求和
            while (calculateNum!=0) {
				sum += (calculateNum % 10) * (calculateNum % 10);
				calculateNum /= 10;
            }
            if(repeatSum.find(sum) == repeatSum.end()){
                
				//如果没有重复的数字 则将其加入
                repeatSum.insert(sum);
				//将计算的数字赋值给calculateNum
				calculateNum = sum;
				sum = 0; // 重置sum为0
            }
            else if (sum == 1) {

				return true; // 如果sum为1 则说明是快乐数字
            }
            else {
                //说明进入循环了 
				return false;
            }
        }
    }
};


Comment