算法day18 快乐数

题目描述

思路:
这道题我们试图判断一个数是否符合快乐数的定义。我们可以将其转化为,在判断的n在快乐数算法的演变下转化的数值是否等于1,同时排除掉重复的转化值。那么对于唯一元素的收容的数据结构,我们可以使用集合unordered_set。我们通过在循环中判断sum,并收集sum,最终按照条件的情况返回bool值。

代码如下

int GetSum(int n) {//得到每一轮的拆分后的平方和
   int sum = 0;
   while (n) {
	sum += (n % 10) * (n % 10);
	n /= 10;
  }
   return sum;}

bool isHappy(int n) {
   unordered_set<int> SET;
   while (1) {
	int sum = GetSum(n);
	if (sum == 1) {
		return true;
	}
	if (SET.find(sum) != SET.end()) {//要是找到了,说明曾经收集过,已经重复,那就该返回了
		return false;
	}
	else {
		SET.insert(n);
	}
	n = sum;
  }
}

时间复杂度:O(logn)
空间复杂度:O(logn)

END

posted on 2025-04-25 23:17  sakura430  阅读(7)  评论(0)    收藏  举报