leetcode:快乐数(详解)

news2024/11/16 5:34:34

前言:内容包括:题目,代码实现,大致思路,代码解读

题目:

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

提示:代码实现:

int getsum(int n)
{
    int ret = 0;
    while(n)
    {
        ret+=pow(n%10,2);
        n/=10;
    }
    return ret;
}

bool isHappy(int n)
{
    int sum = getsum(n);
    int arr[810] = {0};
    while(sum!=1)
    {
        if(arr[sum]!=1)
        {
            arr[sum] = 1;
        }
        else
        {
            return false;
        }
        sum = getsum(sum);
    }
    return true;
}

大致思路:

 不快乐数的每一位的平方和不断演变,其中演变得到的某个和可能会出现2次以上

快乐数的每一位的平方和不断演变,每次演变得到的和都只会出现一次

1 判断输入的数字n的每一位的平方和是否为1 不为1则进入循环进行演变

2 在下一次演变得到一个新的和之前,需要对当前的和进行标记,以此和的数值作为下标,在其对应的数组空间内置1,这样当此和再次出现时,它所对应的空间中已经有值了,说明当前判断的数字不是快乐数,直接返回

3 进行演变,得到一个新的和

4 当循环结束时,满足和==1的条件,则判断的数字是快乐数

代码解读:

函数部分:得到一个数字的每一位的平方和

int getsum(int n)
{
    int ret = 0;
    while(n)
    {
        ret+=pow(n%10,2);
        n/=10;
    }
    return ret;
}

得到一个数字的每一位:%10 /10

以123为例:

123%10 得到3

123/10 去掉一位(3)

……

主体部分

bool isHappy(int n)
{
    int sum = getsum(n);
    int arr[810] = {0};
    while(sum!=1)
    {
        if(arr[sum]!=1)
        {
            arr[sum] = 1;
        }
        else
        {
            return false;
        }
        sum = getsum(sum);
    }
    return true;
}

 

 2的31次方共有10位数,则n的取值我们按照最大情况算:

设这10个位置上的数字都是9:9999999999

平方和:81*10 = 810

所以我们设定数组arr的大小为810,当然也可以设置地更大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/410690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

坚鹏:《银行业数字化转型指导意见》政策解读及银行数字化转型

中国银保监会《关于银行业保险业数字化转型的指导意见》政策解读及银行数字化转型课程背景: 很多银行存在以下问题: 不知道如何准确理解中国银保监会《关于银行业保险业数字化转型的指导意见》相关政策 不清楚中国银保监会《关于银行业保险业数字化转型…

使用AI进行“文本纠错”

AI在现实中的应用有很多,你有没有想过,它还可以进行文本纠错呢?传统的校对既耗时又枯燥,通过“AI纠错”,不仅能更快完成,还能提高准确度。那么AI“文本纠错”背后的原理是什么呢?和我一起看看吧…

Python综合案例-小费数据集的数据分析(详细思路+源码解析)

目录 1. 请导入相应模块并获取数据。导入待处理数据tips.xls,并显示前5行。 2、分析数据 3.增加一列“人均消费” 4查询抽烟男性中人均消费大于5的数据 5.分析小费金额和消费总额的关系,小费金额与消费总额是否存在正相关关系。画图观察。 6分析男女顾…

chatGPT写文章攻略-用chatGPT写网文

chatGPT可以写中文吗 ChatGPT可以写中文。在过去的几年中,许多深度学习机器翻译模型已经开始探索中英文翻译、去噪声、语音识别等任务,并且在这些任务中ChatGPT具有最先进的表现。 目前,例如GPT-3和GPT-2都可以用来生成中文文本。为此&…

以太坊上海升级,DeFi 3.0的序章

引言 距离以太坊Shapella升级(也曾被称为上海升级)仅剩一天的时间!自2015年以太坊上线以来,它已成为世界排名第二的加密虚拟资产,以太坊诞生于行业的意义在于它能够让开发者构建智能合约和去中心化应用(DAp…

Jumpserver与Freeipa集成(以及其他配置)

背景: jumpserver的安装参照:jumpserver的简单安装使用,Freeipa的安装参照:Freeipa的简单搭建配置。准备将Freeipa与Jumpserver集成。其实Freeipa搭建后linux客户端如果安装了Freeipa client。也能完成用户的授权权限管理了&…

肖 sir_就业课__005项目数据

项目数据 一、项目周期 (1)新项目:从无到有,从项目的开始到上线的时间 时间长:3个月、6个月、1年、2年 (2)老项目:迭代项目 迭代周期:1个月、2个月、3个月迭代、 &#…

现在是香港推动Web3的“正确时机” 将采取监管与发展并重策略

香港财政司司长陈茂波在香港特区政府网站发表司长随笔《发展Web3—守正创新 稳慎前行》,提出为了让Web3稳慎走好创新发展的道路,政府将采取“适当监管”和“推动发展”两者并重的策略,确保虚拟资产行业可持续和负责任发展。 此前,…

java_集合

1.集合 集合分为单列集合(collection)和双列集合(map). 单列就是每个位置只有一个值,双列则是每个位置都是一对键值对,类似于python的字典。 2.collection 其中,collection又可以分为List…

全国大学生智能汽车竞赛——安装Ubuntu操作系统(双系统)

1.1 电脑分区 1.1.1 分区原因 由于我们想要在电脑上同时安装Windows和Ubuntu系统,所以就要在window使用的内存中划分出来一段用来给Ubuntu系统使用,相当于一个应用程序一样 1.1.2 分区步骤 1.右击此电脑,点击管理,然后双击左侧…

【刷题笔记】--dp--376. 摆动序列122. 买卖股票的最佳时机 II

感觉自己dp还不是很会(/(ㄒoㄒ)/~~ 写dp题的步骤:①通过定义子问题,确定dp[ ] or dp[ ][ ] 表示的含义 ②写出子问题的递归关系 ③确定初始条件 题目: 思路: ①确定dp的含义:dp[i]表示 到i位置&#x…

网络信息安全(三层设备部署DHCP服务器与DHCP中继、ICMP协议)

文章目录三层路由器部署DHCP服务器配置trunkVLAN创建将端口加入对应vlan路由创建子接口路由器创建地址池服务器配置静态IPDHCP服务器部署创建作用域在三层设备配置DHCP中继DHCP中继原理ICMP协议概述用途封装格式三层路由器部署DHCP服务器 配置trunk VLAN创建 这里以S1为例&…

Vulnhub:Digitalworld.local (Development)靶机

kali:192.168.111.111 靶机:192.168.111.130 信息收集 端口扫描 nmap -A -v -sV -T5 -p- --scripthttp-enum 192.168.111.130 查看网站首页源码 访问development目录,提示存在一个流量包 查看流量包发现另一个网站路径:/devel…

多模态之论文笔记ViLT

文章目录ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision一. 简介1.1 摘要1.2 文本编码器,图像编码器,特征交互复杂度分析1.2 特征交互方式分析1.3 图像特征提取分析二. 方法 Vision-and-Language Transformer2.1. 方…

【高危】Apache Linkis JDBC EngineConn 插件<1.3.2 存在反序列化漏洞

漏洞描述 Apache Linkis 是一个用于将上层应用与底层数据引擎解耦,提供标准化接口的中间件。 该项目受影响版本存在反序列化漏洞,由于ConnectionManager.java中未对dbUrl、username、password等参数进行充分过滤,当恶意用户完全控制应用程序…

缘起|蚂蚁应用级服务发现的实践之路

文|肖健(花名:昱恒)蚂蚁集团技术专家、SOFARegistry Maintainer专注于服务发现领域,目前主要从事蚂蚁注册中心 SOFARegistry 的设计和研发工作。本文 8339 字 阅读 15 分钟PART. 1前言什么是服务发现?我们今…

Python人工智能在气象中的实践技术应用

专题一 Python 和科学计算基础 1.1 Python 入门和安装 1.1.1 Python 背景及其在气象中的应用 1.1.2 Anaconda 解释和安装以及 Jupyter 配置1.1.3 Python 基础语法 1.2 科学数据处理基础库 1.2.1 Numpy 库1.2.2 Pandas 库1.2.3 Scipy 库 1.2.4 Matplotlib 和 Cartopy 库 …

thinkphp6多应用模块配置使用

1.安装thinkphp6 6.0之前安装都是从Git或者直接下载安装包进行安装,从6.0开始安装方式就改成了composer进行安装了,安装命令如下: 稳定版:composer create-project topthink/think tp 开发版:composer create-projec…

SOLIDWORKS官方认证考试

SOLIDWORKS官方认证考试: CSWA认证 CSWP认证 CSWPA认证 CSWE认证 SOLIDWORKS认证考试是达索SOLIDWORKS公司推出的全球性认证考试项目,是作为衡量您所具备的SOLIDWORKS应用专长与能力的一种测试和认可,主要考察对设计、仿真一体化、机电一体…

Hadoop 生态圈及核心组件简介Hadoop|MapRedece|Yarn

文章目录大数据时代HadoopHadoop概述Hadoop特性优点Hadoop国内外应用Hadoop发行版本Hadoop集群整体概述HDFS分布式文件系统传统常见的文件系统数据和元数据HDFS核心属性HDFS简介HDFS shell操作Map Reduce分而治之理解MapReduce思想分布式计算概念MapReduce介绍MapReduce产生背景…