双指针练习:快乐数

1.题目链接:202.快乐数

2.题目描述:

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

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

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

3.题目分析:

1.根据题意以及测试用例我们发现,我们会频繁的对一个数进行取余 求余方 再取模。

因此,我们可以写一个函数封装这个操作。如何求一个数n每个位置上的数字的平方和?

        a.把数 n 每一位的数提取出来

                i. int t = n % 10 提取个位;

                ii. n = n / 10 干掉个位;

                直到 n 的值变为0;

        b.提取每一位的时候,用一个变量 tmp 记录这一位的平方与之前提取位数的平方和

                tmp = tmp + t * t

2.拿到一个题,我们先分析一个案例,例如 n = 19 

如果n = 2

由此我们可以发现:如果数n 是一个快乐数,它的最后一个数是1

如果数n 不是快乐数,它最终会形成一个环,不停的循环下去。

接着我们拓展一个原理:鸽巢原理(抽屉原理)

n个巢,有n+1个鸽子,可以推出至少有一个巢,里面的鸽子数大于1;

因此我们来看题目范围

这是一个整形的最大数,大约为 2.1*10^9

我们可以假设一个比他更大的数 整形最大数约为10位数,且最大的数一定不会超过99999 99999

我们来计算这个数每个位置上的数字的平方和,9^2 * 10 = 810,也就是最大的数是810

题目n最小为1,所以每个位置上的数字平方和的范围在 [1,810] 之间,有810个数。

由此可以推出:一个数经过不停的分割成下一个数,经过811次 这个分割后的数一定会出现重复的情况,也就是会进环,因此我们使快慢指针追击即可

代码:

class Solution {
public:

    //  封装一个函数,实现个位数字平方和相加
    int bitSum(int n){
        int sum = 0;//定义相加后的结果
        while(n){//不停的取模取余,直到这个数为0为止
        int bit = n % 10;
        n = n/10;
        sum += bit * bit;
        }
        return sum;
    }
    bool isHappy(int n) {
        int slow = n;
        int fast = bitSum(n);//下一次被操作数的结果
        while(slow != fast){
            slow = bitSum(slow);//slow走一步
            fast = bitSum(fast);
            fast = bitSum(fast);//fast走两步
            //根据鸽巢原理可知,slow和fast一定会相遇
        }
        return slow == 1;//判断最后结果是不是1
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

丛林生存法则其实就两个字:输出

不管你是在上班,还是在灵活就业,现在的大环境下,你要想活下来,生存下去,一定要记住这两个字:输出。如果你能记住更多的字,那便是持续高水平的输出。 你如果是大厂程序员,你肯定发现…

会议管理系统(含源码+sql+视频导入教程)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 会议管理系统拥有两种角色 管理员:部门管理、员工管理、会议管理、会议室管理、预订会议、添加员工、注册员工审批等 用户:个人通知中心、预订会议、查看所有会议…

Java网络编程(下)

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:Java网络编程🙉 🐹今日诗词:姑苏城外寒山寺,夜半钟声到客船🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微小博主…

es的总结

es的collapse es的collapse只能针对一个字段聚合(针对大数据量去重),如果以age为聚合字段,则会展示第一条数据,如果需要展示多个字段,需要创建新的字段,如下 POST testleh/_update_by_query {…

PTA 计算矩阵两个对角线之和

计算一个nn矩阵两个对角线之和。 输入格式: 第一行输入一个整数n(0<n≤10)&#xff0c;第二行至第n1行&#xff0c;每行输入n个整数&#xff0c;每行第一个数前没有空格&#xff0c;每行的每个数之间各有一个空格。 输出格式: 两条对角线元素和&#xff0c;输出格式见样例…

音视频开发—H264码流组成

本文包含了编码过程的相关概念&#xff0c;如果不了解编码过程&#xff0c;请看这篇文章&#xff1a;H264相关概念和压缩原理详解 H.264视频编码标准将视频编码过程分为两个主要层次&#xff1a;视频编码层&#xff08;VCL, Video Coding Layer&#xff09;和网络抽象层&#x…

Vue:Bin Code Editor格式化JSON编辑器

最终效果如下图所示&#xff0c; Bin Code Editor安装 npm或yarn安装命令如下&#xff0c; npm i bin-code-editor -S # or yarn add bin-code-editor 组件注册 全局注册 在 main.js 中写入导入以下内容&#xff0c; import Vue from vue; import CodeEditor from bin-cod…

0、机器学习知识点

机器学习知识点 知识点汇总 知识点汇总 https://blog.csdn.net/seagal890/article/details/105352987 https://blog.csdn.net/fengdu78/article/details/115878843

el-table超过宽度强制显示滚动条

使用css强制显示&#xff1a; .el-table .el-table__body-wrapper::-webkit-scrollbar {display: block; }

看图猜成语微信小程序源码

后台可以自行设置关卡、等级、也可以一键部署&#xff0c; 开通流量主之后实现躺赚&#xff0c;你懂得。 个人号也可以开通&#xff0c;审核一次性必过。 类目选择 教育&#xff0c;源码仅供您参考&#xff01; 源码下载 https://download.csdn.net/download/huayula/8938579…

【RS】哨兵系列新网站无法下载的问题及解决办法(Sentinel-2)

最近有些小伙伴留言说哨兵数据无法下载&#xff0c;网站打开后会有一层蒙版&#xff0c;无法选取研究区等信息&#xff0c;今天就跟大家分享一下如何解决这个问题。还知道如何下载的小伙伴可以移步到之前的文章&#xff1a;【RS】欧空局Sentinel-2卫星数据下载(哨兵1、2、3、5P…

DNF手游6月5日更新亮点全解析!

在即将到来的6月5日更新中&#xff0c;《DNF手游》将迎来一系列令人振奋的新内容和玩法。本文将详细介绍本次更新的主要内容&#xff0c;包括新增的组队挑战玩法“罗特斯入门团本”&#xff0c;新星使宠物的推出&#xff0c;宠物进化功能的开放&#xff0c;以及六月下旬即将落地…

2023年03月 Python(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 有如下程序段: with open(mistakes.txt, w) as f:words =[believe,

解决:写路由文件时引入页面路径没有提示

1、首先安装插件&#xff1a; Path Autocomplete 2、配置settings.json 文件 复制下面代码到settings.json配置文件中&#xff1a; "path-autocomplete.pathMappings": {"": "${folder}/src/","views": "${folder}/src/views/&…

数据可视化每周挑战——中国高校数据分析

最近要高考了&#xff0c;这里祝大家金榜题名&#xff0c;旗开得胜。 这是数据集&#xff0c;如果有需要的&#xff0c;可以私信我。 import pandas as pd import numpy as np import matplotlib.pyplot as plt from pyecharts.charts import Line from pyecharts.charts impo…

先进的无人机GPS/GNSS模块解决方案

由于多星座支持和增强的信号接收能力&#xff0c;先进的GNSS模块提供了更高的精度和可靠性。集成传感器融合补偿信号中断&#xff0c;实现无缝导航。内置实时运动学(RTK)支持提供厘米级的定位精度。这些模块还优先考虑低功耗和紧凑的尺寸&#xff0c;确保更长的飞行时间和对无人…

入手戴尔R720,通过iDRAC查看系统信息

想入手服务器很久了&#xff0c;一直担心功耗太高&#xff0c;今天狠心搞了一台戴尔服务器R720。 需求 开虚拟机&#xff0c;核心数要多 学习以下 Windows云桌面AD域控office online serverubuntu试验机 随便折腾不怕玩坏 最好两个网口以上 稳定 四个以上硬盘位 ‍ 为什么是…

信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!

作者介绍 礁鲨系列天线&#xff0c;以其独特的外观设计和强大的性能&#xff0c;成为德思特Panorama智能天线家族的最新成员。这款天线不仅稳定提供5G、WIFI和GNSS信号&#xff0c;更能在各类复杂环境中展现出卓越的性能。它的设计灵感来源于海洋中的礁鲨&#xff0c;象征着力量…

计算机考研|408 值得选择吗?有哪些优势?

408当然非常值得报考&#xff0c;但是现在的408已经卷麻了&#xff01; 现在越来越多的学校改考408&#xff0c;光今年就有6所发布通知&#xff0c;宣布改考408&#xff0c;分别是&#xff1a; 这对考408的学生肯定是好消息&#xff0c;后面可能还会有学校陆续改考&#xff0c;…

SpringBoot项目实现自定义注解方式的接口限流

一&#xff0c;实现原理 该限流方式使用的是令牌桶算法&#xff0c;令牌桶算法是基于漏桶算法的一种改进&#xff0c;主要在于令牌桶算法能够在限制服务调用的平均速率的同时&#xff0c;还能够允许一定程度内的突发调用。 系统以固定的速率向桶中添加令牌当有请求到来时&#…