每日一题:LeetCode-202.快乐数(一点都不快乐)

news2024/11/26 16:46:56

每日一题系列(day 06)

前言:

🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈

   🔎🔎如果说代码有灵魂,那么它的灵魂一定是👉👉算法👈👈,因此,想要写出💚优美的程序💚,核心算法是必不可少的,少年,你渴望力量吗😆😆,想掌握程序的灵魂吗❓❗️那么就必须踏上这样一条漫长的道路🏇🏇,我们要做的,就是斩妖除魔💥💥,打怪升级!💪💪当然切记不可😈走火入魔😈,每日打怪,日日累积,终能成圣🙏🙏!开启我们今天的斩妖之旅吧!✈️✈️


题目:

   编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:

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

示例:

在这里插入图片描述

提示:

  • 1 <= n <= 2^31 - 1

思路:

  虽然力扣把这题给标为了简单,但是如果你想不明白给的第二个条件,这题和困难也相差无二,第一个条件是给你一个正整数,每个位置的平方和就是下一个位置,第二个条件其实说明了在这里只有两种情况,一种是最后变成1一直循环,另外一种情况是存在一个环使得这个数永远不能为1。是1就快乐数,不是1就不是快乐数。

  我知道你还有疑问:“为什么就这两种情况呢?循环会不会是无限不相等的循环?”

在这里插入图片描述

  可以看到,当为2时就是一个循环,当为19时最后就能得到1,所以19为快乐数,2不是快乐数,但是最让人不快乐的地方在于会不会存在无限不循环?

在这里插入图片描述

  上面也就说明了,我们快乐数只用两种情况,一种是最后为1一直循环,一种是其他数绕圈子循环,并不存在不循环的情况。

我们知道了题目是什么意思,那我们该如何写这个题目呢?
  1、其实我们仔细观察不难发现,给了我们一个数,我们就一定能推出来下一个数,而下一个数就一定能推出来下下个数…而且所推的数是固定的不变的,这种关系是不是就像我们的链表关系?
在这里插入图片描述
  2、所以这题其实我们就可以用链表来实现,给我们的每个值就是一个个节点,我们得到下一个数的方式其实也就是指针指向的关系。
  3、我们前面得出了结论:如果最后循环为1就是快乐数,如果最后循环不为1就不是快乐数,说到循环和链表你能想到什么?没错————带环链表,还记得我们是如何解决带环链表的问题的吗?没错,我们使用的是双指针法来解决带环链表的问题。
  4、这样就好办了,我们只需要设置快慢指针,如果快指针已经为1了,则就是快乐数,所以只要快指针不为1我们就一直循环,如果快指针与慢指针相遇了,这时我们就要判断快指针与慢指针的时的值是不是为1,如果不是1,则表示进入了我们所说的第二种情况,进入了其他数的循环,则就不为快乐数,直接返回false即可。

代码实现:

class Solution {
public:

    int GetNext(int x)//获得下一个数
    {
        int tmp = 0, cnt = 0;
        while(x)
        {
            tmp = x % 10;
            cnt += tmp * tmp;
            x /= 10;
        }
        return cnt;
    }
    bool isHappy(int n) {//传入的n值即为第一个节点
        int quick = n, slow = n;//让两个指针都指向第一个节点
        while(quick != 1)//当快指针没有变成1的时候一直循环
        {
            quick = GetNext(GetNext(quick));//用平方和的关系得到下一个数(链表指向的下一个值)快指针为2个数,所以调用两次
            slow = GetNext(slow);//慢指针一次一个数
            if(quick == slow && slow != 1) return false;//当两个指针相遇的时候,
        }
        return true;
    }
};

  最后,快乐数这题我感觉不应该标位简单,应该标位中等或者困难,很多人会被无限不循环给误导,以至于代码实现起来就比较困难,这题最主要的还是题目给的第二个条件,理解了就很简单。

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

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

相关文章

【数据结构】图<简单认识图>

对于下面的内容&#xff0c;大家着重观察和理解图即可&#xff0c;可以直接绕过一些文字性的概念&#xff0c;对图有一个大概的认识。 图 简单认识图图的定义有向图和无向图完全图无向完全图有向完全图 图的基本存储结构邻接矩阵存储邻接矩阵的优点 网络的邻接矩阵邻接表无向图…

C++基础 -5- 动态内存分配

相对于c语言的优势 C可以在分配空间时初始化 返回的内存地址不需要进行强制类型转换 动态申请单块内存格式(图片代码段呈现) 且在分配的时候可以用圆括号直接赋值 int *bnew int(99);动态申请多块内存格式 int *anew int[1024]{88,99,1010};释放空间 释放单块 delete b;释放…

centos7 keepalived探测当前节点

手动查看 查看keepalived集群主节点在哪台服务器&#xff0c;执行命令&#xff1a; ip a 看下自己设定的虚IP在哪台服务器&#xff0c;哪台就是主节点。 脚本实现 rm -rf ./tmp.log ip a > ./tmp.log if cat tmp.log |grep "132" thenecho -e "\033[32m…

香港科技大学广州|智能制造学域博士招生宣讲会—天津大学专场

时间&#xff1a;2023年12月07日&#xff08;星期四&#xff09;15:30 地点&#xff1a;天津大学卫津路校区26楼B112 报名链接&#xff1a;https://www.wjx.top/vm/mmukLPC.aspx# 宣讲嘉宾&#xff1a; 汤凯教授 学域主任 https://facultyprofiles.hkust-gz.edu.cn/faculty-p…

P19 C++ 构造函数的成员初始化列表

目录 前言 01 如果不用成员列表如何初始化变量 02 成员列表初始化 03 为什么要使用成员列表初始化呢&#xff1f; 04 案例代码 前言 本期我们聊聊构造函数初始化列表。 你应该经常使用成员初始化列表&#xff0c;如果你不喜欢这种代码风格&#xff0c;建议你还是慢慢习惯吧…

适配rem自动转换插件(vscode)

可以根据自己的草稿图&#xff0c;设置自己想要多少px对应1rem 这样子在我们写css单位的时候就会自动转换为rem单位了&#xff0c;当然&#xff0c;转换肯定是可选的&#xff0c;不是说只能写rem了。

线程基本方法

1。设置线程名 继承Thread类的线程&#xff0c;可以直接使用.setName()方法&#xff0c;设置线程名。也可以使用构造方法&#xff0c;需要注意java默认不继承构造方法&#xff0c;所以需要自己调用下父类的构造方法。 public class Demo {public static void main(String[…

如何在手机上打开电脑端本地的网页

目录 一.手机端预览VSCode生成的网页站点二.手机端预览VS2022生成的 WebApi网页站点三.总结 今天遇到了2个小问题&#xff1a;1.想在手机上运行VSCode上写好的网页代码。2.同样在手机上运行VS2022 WebApi生成的网页。查找了一晚上资料&#xff0c;终于动手解决了&#xff0c;记…

线性分类器--分类模型

记录学习 北京邮电大学计算机学院 鲁鹏 为什么从线性分类器开始&#xff1f;  形式简单、易于理解  通过层级结构&#xff08;神经网络&#xff09;或者高维映射&#xff08;支撑向量机&#xff09;可以 形成功能强大的非线性模型 什么是线性分类器&#xff1f; 线性分…

一觉睡到大天亮,dido P1S智能手环体验

智能穿戴设备对于有关注健康的朋友来说&#xff0c;是非常使用的工具&#xff0c;它们可以帮助我们实时监测一些健康数据&#xff0c;最近几年&#xff0c;国产的智能穿戴设备突飞猛进&#xff0c;大幅拉低了价格门槛&#xff0c;而且使用体验也很不错&#xff0c;现在我用的也…

初识Spring (Spring 核心与设计思想)

文章目录 什么是 Spring什么是容器什么是 IoC理解 Spring IoCDI 概念 什么是 Spring Spring 官网 官方是这样说的: Spring 让每个人都能更快、更轻松、更安全地进行 Java 编程。春天的 专注于速度、简单性和生产力使其成为全球最受欢迎Java 框架。 我们通常所说的 Spring 指的…

CSS3制作3D爱心动画

1、什么是CSS css&#xff0c;即层叠样式表的简称&#xff0c;是一种标记语言&#xff0c;有浏览器解释执行用来使页面变得更美观。 2、选择器 css3中新增了一些选择器&#xff0c;如下&#xff1a; 3、新样式 边框 css3新增了三个边框属性&#xff0c;分别是&#xff1a; bo…

Postman:专业API测试工具,提升Mac用户体验

如果你是一名开发人员或测试工程师&#xff0c;那么你一定知道Postman。这是一个广泛使用的API测试工具&#xff0c;适用于Windows、Mac和Linux系统。今天&#xff0c;我们要重点介绍Postman的Mac版本&#xff0c;以及为什么它是你进行API测试的理想选择。 一、强大的功能和易…

文件夹重命名技巧:如何整理过长且混乱的文件夹名称

当浏览计算机文件夹时&#xff0c;有时候会遇到一些过长且混乱的文件夹名称&#xff0c;给文件夹管理带来不便。倘若手动修改文件夹名称会出现错误的机率过大&#xff0c;且这样操作太耗费时间和精力。有什么方法能够避免手动修改文件夹名称&#xff0c;提升工作效率的方法呢&a…

Java远程连接本地开源分布式搜索引擎ElasticSearch

文章目录 前言1. Windows 安装 Cpolar2. 创建Elasticsearch公网连接地址3. 远程连接Elasticsearch4. 设置固定二级子域名 前言 简单几步,结合Cpolar内网穿透工具实现Java远程连接操作本地Elasticsearch。 什么是elasticsearch&#xff1f;一个开源的分布式搜索引擎&#xff0…

git报错:error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413

git报错&#xff1a;error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 如图&#xff1a; error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 send-pack: unexpected disconnect while reading sideband packet fatal: th…

最火前端可视化Web组态软件工具

随着5G、物联网、大数据等技术的高速发展&#xff0c;各领域逐步向数字化、可视化的人工智能&#xff08;AI&#xff09;的方向不断迈进。全球进入工业 4.0 时代&#xff0c;标志着先进的信息技术于制造业紧密结合&#xff0c;将从单纯的生产要素向数据驱动、智能化、高度自动化…

线性分类器---损失函数与优化算法

如何衡量分类器对当前样本的效果好坏&#xff1f; 需要损失函数 什么是损失函数&#xff1f; 损失函数搭建了模型性能与模型参数之间的桥梁&#xff0c;指导 模型参数优化。  损失函数是一个函数&#xff0c;用于度量给定分类器的预测值与真实值 的不一致程度&#xff0c;…

sprintf函数

1.头文件&#xff1a;#include <stdio.h> 2.函数原型&#xff1a;int sprintf ( char * str, const char * format, ... ) 3.函数功能&#xff1a;将数据格式化为字符串&#xff0c;再写入到字符串中 4.参数分析&#xff1a; str&#xff1a;是字符串指针&#xff0c…

【MyBatisPlus】通俗易懂 快速入门 详细教程

目录 学习目标 一、MyBatisPlus简介 1. 入门案例 问题导入 1.1 SpringBoot整合MyBatisPlus入门程序 ①&#xff1a;创建新模块&#xff0c;选择Spring初始化&#xff0c;并配置模块相关基础信息 ②&#xff1a;选择当前模块需要使用的技术集&#xff08;仅保留JDBC&…