• 代码随想录-022-202.快乐数


    前言

    在本科毕设结束后,我开始刷卡哥的“代码随想录”,每天一节。自己的总结笔记均会放在“算法刷题-代码随想录”该专栏下。
    代码随想录此题链接

    题目

    编写一个算法来判断一个数 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

    1. 哈希表

    思路(定义变量)

    1. unordered_set用来储存sum的值。

    2. 本题思路分析:

    1. 如何判断是否会无限循环? 如果求和过程中,出现重复值,就说明会无限循环,这个就用unordered_set来存储判断和是否会出现重复的值。
    2. 难点1,不知道如何获取int类型正整数n的每个位置上数字的平方和,
      方法:构造循环,正整数n不为0就继续循环,使用%10获取各位上的数,再除以10,去除个位上的数,再%10获取之前十位上的数(现在已经变成了个位上的数),如此往复。
    int n = 19;//获取正整数n数字上各个位上数字的平方和
    int sum = 0;//sum是和
    while(n){
    	sum += pow((n % 10),2);	
    	n /= 10;
    }
    return sum;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3. 算法实现

    • 代码:
    #include 
    #include 
    #include 
    #include 
    using namespace std;
    //取各个位上的平方和 
    int getSum(int n){
    	int sum = 0;
    	while(n) {
    		sum += pow((n % 10),2) ;//将个位上的数求平方和 
    		n = n / 10;//去除最后一位 
    	}
    	return sum;
    }
    
    bool isHappy(int n) {
    	unordered_set<int> s;
    	while(s.find(n) == s.end() && n != 1){
    		s.insert(n);
    		n = getSum(n);
    	}
    	if(n == 1){
    		return true;
    	}else{
    		return false;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    4. 算法坑点

    1. 如何判断是否会无限循环? 如果求和过程中,出现重复值,就说明会无限循环,这个就用unordered_set来存储判断和是否会出现重复的值。
    2. 难点1,不知道如何获取int类型正整数n的每个位置上数字的平方和,
      方法:构造循环,正整数n不为0就继续循环,使用%10获取各位上的数,再除以10,去除个位上的数,再%10获取之前十位上的数(现在已经变成了个位上的数),如此往复。
    int n = 19;//获取正整数n数字上各个位上数字的平方和
    int sum = 0;//sum是和
    while(n){
    	sum += pow((n % 10),2);	
    	n /= 10;
    }
    return sum;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    activemq的安全机制、Connection使用方法、Session的使用方法、签收模式、使用事务
    C++ 函数对象
    springboot毕设项目车位预定管理系统76ov7(java+VUE+Mybatis+Maven+Mysql)
    Java面试八股之marshalling和demarshalling
    CarbonData详细解析
    软信天成:干货分享,如何实施云迁移策略!
    JS实现关闭网页广告弹窗特效
    形态学 - 凸壳
    Windows无法启动MySQL80服务(位于本地计算机)
    微信,支付宝在线换钱平台系统源码
  • 原文地址:https://blog.csdn.net/weixin_43356308/article/details/126241338