算法---双指针练习-3(快乐数)

题目

  • 1. 题目解析
  • 2. 讲解算法原理
    • 鸽巢原理
  • 3. 编写代码

1. 题目解析

题目地址:点这里

在这里插入图片描述
在这里插入图片描述

2. 讲解算法原理

在这里插入图片描述
在这里插入图片描述

  • 本题根据鸽巢原理是一定会有环的,最后要么无限循环1,要么碰到一个不为1的重复数继续循环

鸽巢原理

鸽巢原理(Pigeonhole Principle)是一种基本的数学原理,也被称为抽屉原理(Drawer Principle)或鸽笼原理(Box Principle)。它是指如果有n+1个物体放入n个容器中,那么至少有一个容器中会放入两个或更多的物体。

鸽巢原理的简单表述是:如果将n+1个物体放入n个容器中,那么至少有一个容器中会放入两个或更多的物体。(用在数字中就表示:规定在[0,n]范围内的数,无论如何运算,在运算n+1次后,一定至少会有一次重复

这个原理的背后思想是,当要将大量的物体放入数量有限的容器中时,如果物体的数量大于容器的数量,那么至少有一个容器必须承载多个物体。


算法的基本思路如下:

1.定义两个指针,一个快指针(fast)和一个慢指针(slow)。初始时,将快指针和慢指针都设置为输入的数(n)。

2.在每次迭代中,快指针会通过调用PowSum函数计算得到一个新的值,即将当前值的每个位置上的数字的平方和。然后再次调用PowSum函数得到一个新的值,相当于快指针每次向前移动两步。

3.慢指针在每次迭代中只移动一步,通过调用PowSum函数计算得到一个新的值。

4.在每次迭代后,判断快指针和慢指针是否相等。如果相等,说明找到了一个循环,即存在一个环形路径。如果不相等,继续下一次迭代。

5.当快指针和慢指针相等时,终止循环。此时判断快指针的值是否为1。如果是1,则表示输入的数是快乐数,返回true。如果不是1,则表示输入的数不是快乐数,返回false。


3. 编写代码

class Solution {
public:
//整数各位置上数的平方和int PowSum(int m){int sum=0;while(m){int x=m%10;m/=10;sum+=x*x;}return sum;}bool isHappy(int n) {//根据鸽巢原理,是一定有环的int fast=PowSum(n);//快指针int slow=n;//慢指针//判断俩指针相遇时的值就行while(slow!=fast){int temp=PowSum(fast);fast=PowSum(temp);slow=PowSum(slow);}if(fast==1)return true;else return false;}
};

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#与python交互(flask发送Get/Post请求)

先运行python,再运行C# **ps: 注意修改端口号**python发送Get/Post请求 # -*- coding: utf-8 -*- # Time : 2024/1/25 15:52 # Author : YY # File : post_test.py # Content:提交数据给客户端 from flask import Flask, request, jsonify, redirect…

【嵌入式——QT】标准对话框

【嵌入式——QT】标准对话框 文件对话框颜色对话框字体对话框输入对话框消息框代码示例 文件对话框 QFileDialog 常用静态函数 getOpenFileName:选择打开一个文件;getOpenFileNames:选择打开多个文件;getSaveFileName&#xff1…

WPF 消息提示 类似toast方式

WPF里面的消息提示一般都是MessageBox.Show(),这种样式不是很好看,所以就想办法重新搞了一个类似弹出消息的功能。原理很简单,就是弹出一个新窗体,然后等几秒窗体自动关闭。 先上效果图: 新建一个MsgHelper.cs类&…

Linux运维工程师不可或缺的10款工具

运维工程师在日常工作中频繁运用的10款工具,并细致阐述每款工具的功能、适用场景以及其卓越之处。 1. Shell脚本: 功能:主要用于自动化任务和批处理作业。 适用场景:频繁用于文件处理、系统管理、简单的网络管理等操作。 优势&…

重生奇迹mu战士大师技能加点怎么加

1、在重生奇迹MU中,战士大师的技能加点需要根据个人的游戏风格和需求来决定。一般来说,战士大师可以优先加点力量和体力,以增加攻击和生存能力。同时,可以适当加点敏捷来提高闪避和命中率。 2、在技能方面,可以根据个人…

云计算项目九:K8S安装

K8S安装 Kube-master安装 按照如下配置准备云主机 防火墙相关配置:禁用selinux,禁用swap,且在firewalld-*。上传kubernetes.zip 到跳板机 配置yum仓库(跳板机) 跳板机主机配置k8s软件源服务端 [rootjs ~]# yum -y…

5G工业网关是什么?

随着科技的飞速发展,5G技术已经逐渐渗透到我们生活的方方面面。而在工业领域,5G工业网关作为连接工业设备与网络的关键组件,正发挥着越来越重要的作用。HiWoo Box其5G工业网关产品以其卓越的性能和稳定性,正助力企业实现数字化转型…

考研数学|到底要不要做张宇《1000题》

根据你自身能力来选择真正适合你的题集,最后的做题效果会加倍。😎 我先分析一下张宇1000题集的特点,张宇1000更适合基础不错,想冲刺高分的同学。 1000分为强化和提高,是没有基础部分的,着重考察数学概念和技…

@大学生必看内容!QT创建C++项目,并使用Opencv进行图像处理!

一、创建C项目 二、向C项目部署opencv。详细步骤:查看地址。 避坑!!

ChatGPT 升级出现「我们未能验证您的支付方式/we are unable to authenticate」怎么办?

ChatGPT 升级出现「我们未能验证您的支付方式/we are unable to authenticate」怎么办? 在订阅 ChatGPT Plus 时,有时候会出现以下报错 : We are unable to authenticate your payment method. 我们未能验证您的支付方式。 出现 unable to a…

连接kafka报错:java.io.IOException: Can‘t resolve address:

修改电脑host文件:C:\Windows\System32\drivers\etc\hosts 加上一行 192.168.1.XXX MHA_SLAVE2(192.168.1.XXX 这个是安装kafka 的服务器地址,MHA_SLAVE2是kafka的容器id)

(实用)如何在vscode设置自己的代码片段,提高开发效率

项目背景 很多时候,我们新建vue文件的时,都需要把重复的代码结构重新输入或者copy过来,对开发效率照成影响。😫 可以通过键入关键词 vue3 快速生成代码片段 构建效果 操作步骤 在vscode左下角,点击设置按钮&#xff0…