[LeetCode-202]-Happy Number-LeetCode 30天挑战赛-2

2023-11-14

文章目录

题目相关

【题目解读】
给定一个正数,判断该数是否是快乐数

快乐数定义:

  • 将该数进行拆分,
  • 拆分后的各个数值的平方求和,
  • 求和的结果进行如下判断
    • 该数是否为1?或者该数包含在一个循环中无休止地循环
    • 如果数值是1就是快乐数,否则不是

ps:上面是快乐数,在遇到<10的数时,自己以为就结束了,未进行计算,实际上还需要继续进行计算。以3为例:
3 2 = 9 3^2 = 9 32=9
9 2 = 81 9^2 = 81 92=81
8 2 + = 1 2 = 65 8^2 + =1^2 = 65 82+=12=65
6 2 + 5 2 = 61 6^2 + 5^2 = 61 62+52=61
6 2 + 1 2 = 37 6^2 + 1^2 = 37 62+12=37
3 2 + 7 2 = 58 3^2 + 7^2 = 58 32+72=58
5 2 + 8 2 = 89 5^2 + 8^2 = 89 52+82=89
8 2 + 9 2 = 145 8^2 + 9^2 = 145 82+92=145
1 2 + 4 2 + 5 2 = 42 1^2 + 4^2 + 5^2 = 42 12+42+52=42
4 2 + 2 2 = 20 4^2 + 2^2 = 20 42+22=20
2 2 + 0 2 = 4 2^2 + 0^2 = 4 22+02=4
4 2 + 0 2 = 16 4^2 + 0^2 = 16 42+02=16
1 2 + 6 2 = 37 1^2 + 6^2 = 37 12+62=37
注意这里出现了37,在第五步的时候也是37,所以后面将会一直循环。

【原题描述】原题链接
Write an algorithm to determine if a number is “happy”.

A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.

Example:

Input: 19
Output: true
Explanation:
1 2 + 9 2 = 82 1^2 + 9^2 = 82 12+92=82
8 2 + 2 2 = 68 8^2 + 2^2 = 68 82+22=68
6 2 + 8 2 = 100 6^2 + 8^2 = 100 62+82=100
1 2 + 0 2 + 0 2 = 1 1^2 + 0^2 + 0^2 = 1 12+02+02=1

【难度】Easy

Solution

以下方法误解了<10的计算方法,对于所有大于10的数据都可以通过该方法进行计算。同时10以内只有1、7才是快乐数,所以改进后继续用该方法进行判断。

#include <vector>
class Solution {
private:
    void num2value(int num, vector<int> &vec)
    {
        while(num / 10 != 0)
        {
            vec.push_back(num%10);
            num /= 10;
        }
        
        if(num != 0)
            vec.push_back(num);
    }
    
public:
    bool isHappy(int n) {        
        if(n/10 == 0)
            return n == 1 or n == 7;
        else
        {
            vector<int> vec;
            num2value(n, vec);
            int sum = 0;
            for( int i =0; i < vec.size(); i++)
            {
                sum += vec[i]*vec[i];
            }
            
            return isHappy(sum);
        }
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[LeetCode-202]-Happy Number-LeetCode 30天挑战赛-2 的相关文章

随机推荐

  • ZYNQ 7000的硬件SPI控制器配置为三线制SPI

    使用zynq去做一些AD DA的操作时候有些只支持三线制的SPI那么我们如何使用PS端的控制器EMIO到PL端实现3线制呢 以上是SPI0的接口信号 我们可以把PL侧的三线制的SDIO信号 inout 通过一个IOBUF原语进行转换出in
  • 数字电路的逻辑符号

  • Mybatis框架之解决列名(表中的字段名称)和实体类中的属性名不一致

    查询数据的时候 查不到userName的信息 原因 数据库的字段名是user name 而POJO中的属性名字是userName 两端不一致 造成mybatis无法填充对应的字段信息 修改方法 在sql语句中使用别名 解决方案1 在sql语
  • 深入理解CRITICAL_SECTION

    http www cnblogs com dirichlet archive 2011 03 16 1986251 html 摘要 临界区是一种防止多个线程同时执行一个特定代码节的机制 这一主题并没有引起太多关注 因而人们未能对其深刻理解
  • Hive其他优化

    一 关联优化器 在Hive的一些复杂关联查询中 可能同时还包含有group by等能够触发shuffle的操作 有些时候shuffle操作是可以共享的 通过关联优化器选项 可以尽量减少复杂查询中的shuffle 从而提升性能 set hiv
  • GPU显存问题-解决Failed to get convolution algorithm. This is probably because cuDNN failed to initialize

    GPU显存问题 使用服务器跑深度学习代码时出现了这样的问题 Failed to get convolution algorithm This is probably because cuDNN failed to initialize so
  • Docker私有仓库搭建与界面化管理

    一 关于Registry 官方的Docker hub是一个用于管理公共镜像的好地方 我们可以在上面找到我们想要的镜像 也可以把我们自己的镜像推送上去 但是有时候我们的使用场景需要我们拥有一个私有的镜像仓库用于管理我们自己的镜像 这个可以通过
  • 动态定义数组

    首先 为什么需要动态定义数组呢 这是因为 很多情况下 在预编译过程阶段 数组的长度是不能预先知道的 必须在程序运行时动态的给出 但是问题是 c 要求定义数组时 必须明确给定数组的大小 要不然编译通不过 如 int Array 5 正确 in
  • android频响曲线图,EQ 频响曲线

    import android annotation SuppressLint import android content Context import android graphics Canvas import android grap
  • 利用matplotlib绘制折线图:CSV格式

    熬过初学阶段的不适和挫败感 我们其实完全可以掌握一个全新的领域 本文为 python编程 从入门到实践 以下简称参考书 中第16章 下载数据中的内容 利用matplotlib绘制最高及最低气温折线图 在此整理为笔记 一为温习 二为备份 以便
  • 深度优先搜索详解 C++实现

    DFS 全文大概四千字左右 如果您初学DFS相信会对您会有很大的帮助 能力有限 很多术语不够专业 理解万岁 二叉树的深度优先搜索 二叉树的概念这里就不细谈了 使用数组来存储二叉树 根结点从1开始 方便计算 设父节点的下标为n 那么左儿子的下
  • RabbitMQ的消息应答、重新入队、持久化

    思考 假如我们的消费者正在处理一个任务 这个任务处理的过程中 突然这个消费者宕机了 导致这个任务没有完成 然而RabbitMQ队列却把这个任务从队列中删除了 那么这个任务就丢失了 改如何解决 消息应答 为了保证消息在发送过程中不丢失 rab
  • 【疑难】以指针赋值,形成数组形式

    include
  • Python项目开发:Flask基于Python的天气数据可视化平台

    目录 步骤一 数据获取 步骤二 设置Flask应用程序 步骤三 处理用户输入和数据可视化 步骤四 渲染HTML模板 总结 在这个数字化时代 数据可视化已经成为我们理解和解释信息的重要手段 在这个项目中 我们将使用Python语言来开发一个基
  • Anaconda的下载步骤

    输入网站 https www anaconda com 进去之后 点击 get started 然后点击如下图所示的 Install Anaconda Individual Edition 然后点击 Download 选择Windows下面
  • AI图片生成Stable Diffusion环境搭建与运行

    Stable Diffusion是一种基于扩散过程的生成模型 由Ge et al 在2021年提出 该模型利用了随机变量的稳定分布 通过递归地应用扩散过程来生成高质量的图像 与其他生成模型相比 Stable Diffusion在生成高质量的
  • c++中别名的定义 using、#define、typedef、typename、namespace的使用

    typedef typename define namespace using区别 1 关键字typedef定义别名 2 typename 3 文本替换宏define 4 using 5 namespace 使用在命名空间上 1 关键字ty
  • k8s初级实战09--Secret

    k8s初级实战09 Secret 1 基础概念 2 常见用法 2 1 创建 secret 2 2 使用 secret 2 3 imagePullSecret 控制镜像访问权限 3 注意事项 4 说明 1 基础概念 Secret 对象类型用来
  • HP惠普服务器做RAID

    安装Raid 10 综合考虑后 使用四块sas硬盘配置Raid10 1 按开电源 废话 2 进入raid配置 3 创建raid raid 阵列 4 保存raid F8保存配置 回车下一步 5 查看raid 查看Raid 4 怎么安装系统 1
  • [LeetCode-202]-Happy Number-LeetCode 30天挑战赛-2

    文章目录 题目相关 Solution 题目相关 题目解读 给定一个正数 判断该数是否是快乐数 快乐数定义 将该数进行拆分 拆分后的各个数值的平方求和 求和的结果进行如下判断 该数是否为1 或者该数包含在一个循环中无休止地循环 如果数值是1就