算法训练——day16快乐数

202. 快乐数

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

提示:

  • 1 <= n <= 231 - 1

哈希 

首先想到的就是哈希和双指针嘛,那就先拿哈希试一下。

class Solution {public boolean isHappy(int n) {Set<Integer> hash = new HashSet<>();//只要n不等于1且hash中不存在这个数,就开始循环,否则跳出循环while(n!=1&&!hash.contains(n)){hash.add(n);n=nextNumber(n);}return 1==n;}//首先,对于每个n都要一直循环得到它的下一个数字,/*输入:n = 19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1*///所以,新设置一个函数得到下一个数字public int nextNumber(int n) {int sum = 0;while (n > 0) {int d = n % 10;n = n / 10;sum += d * d;}return sum;}}

 效果一般,用哈希太慢了。

我们发现每次都要得到下一个数字,存在一个递归的行为。

接着看了一下输出的量级也不大,试一下递归。


递归

class Solution {//如果要用递归的话,我们需要把哈希表放在外面//不然每一次递归都在进行初始化哈希表HashSet<Integer> hash = new HashSet<>();public boolean isHappy(int n) {//为1的时候直接返回trueif(1==n){return true;}//哈希中有有这个数的时候就该退出了(说明进入了环)if(hash.contains(n)){return false;}//接下来是递归的操作//直接存进哈希中hash.add(n);int sum=0;while(0!=n){//求和int tmp = n%10;sum+=tmp*tmp;n/=10;}return isHappy(sum);}
}


 双指针

class Solution {//快慢指针//slow每次前进一格,fast每次前进2格//如果成环,则fast总会追上slow,所以跳出循环//如果终点是1,则fast会一直停留在终点直到slow追上//我们在循环中加入判断,当fast到1时,直接返回truepublic boolean isHappy(int n) {int slow = n;int fast=getNext(n);while(fast!=1&&slow!=fast){slow = getNext(slow);fast=getNext(getNext(fast));if(fast==1) return true;}return 1==fast;}public int getNext(int n){int sum=0;while(n>0){int tmp = n%10;sum+=tmp*tmp;n/=10;}return sum;}
}

yeah!完结 

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

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

相关文章

2024年 现象级的商业模式 上海某店!为何能火爆出圈!

大家好&#xff0c;我是吴军&#xff0c;目前在一家备受瞩目的软件开发公司担任产品管理的重要角色。 当前&#xff0c;市场正经历着商业模式的深刻变革&#xff0c;一种创新的商业模式如潮水般涌现&#xff0c;它巧妙地为消费者编织了省钱的网络&#xff0c;同时也为商家铺设了…

软考架构-面向服务的架构风格

一、SOA 1、概念 面向服务开发&#xff0c;服务之间通过简单、精确定义接口进行通信&#xff0c;不涉及底层编程接口和通信模型。多个服务挂载在ESB&#xff08;企业服务总线&#xff09;上进行通信。 2、特征 可从企业外部访问、随时可用&#xff08;服务请求能被及时响应…

比较推荐哪种可视耳勺?市场高口碑可视耳勺推荐!

很多人仍在使用棉签或者传统金属挖耳勺进行耳部清洁&#xff0c;但往往会清洁不干净或者操作失误引发意外。今天小编要给大家介绍一款新型的挖耳工具---可视耳勺&#xff0c;它能通过内置摄像头进入耳朵查看耳朵内部情况&#xff0c;看清楚耳垢的位置&#xff0c;能清洁干净耳朵…

saltstack高级用法

一、saltstack的高级用法 一、job管理 1、job简介 Jid&#xff1a;job id&#xff0c;格式为%Y%m%d%H%M%S%fmaster在下发指令消息时&#xff0c;会附带上产生的Jid&#xff0c;minion在接收到指令开始执行时&#xff0c;会在本地的cachedir&#xff08;默认是/var/cache/salt/…

人工智能开发实战matplotlib库应用基础

内容导读 matplotlib简介绘制直方图绘制撒点图 一、matplotlib简介 matplotlib是一个Python 2D绘图库&#xff0c;它以多种硬拷贝格式和跨平台的交互式环境生成高质量的图形。 matplotlib 尝试使容易的事情变得更容易&#xff0c;使困难的事情变得可能。 我们只需几行代码…

C语言深入理解指针(二)

目录 指针运算指针-整数指针-指针指针的关系运算 野指针野指针成因指针未初始化指针越界访问指针指向的空间释放 如何规避野指针指针初始化注意指针越界指针不使用时就用NULL避免返回局部变量的地址 assert断言指针的使用和传址调用传址调用例子&#xff08;strlen函数的实现&a…

SSC338D/SSC338Q CA7*2+IPU5M/Multi-sensorISP: HDR/3DNR

SSC338D/SSC338Q系列产品是高度集成的多媒体片上系统&#xff08;SoC&#xff09;产品&#xff0c;适用于IP摄像机、车载摄像机和USB摄像机等高分辨率智能视频录制应用。该芯片包括32位双核RISC处理器、高级图像信号处理器&#xff08;ISP&#xff09;、高性能MJPEG/H.264/H.26…

idear导入他人项目如何快速运行

最近idear经常导入别人的项目&#xff0c;结果永远在加载依赖项。网上查了一堆资料&#xff0c;什么jdk问题&#xff0c;环境变量问题&#xff0c;maven仓库路径问题&#xff0c;总之就是没啥用。那有没有什么简单粗暴的办法&#xff0c;能够导入项目后快速运行呢。 解决方法&a…

MATLAB 2024a安装包下载及安装教程、超详细步骤

[安装环境]: Win 11/Win 10 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等。MATLAB的基本数据单位是矩阵&#xff0c;它的指令表达式与数学…

Git常用指令大全详解

Git常用指令大全详解 Git&#xff0c;作为目前最流行的分布式版本控制系统&#xff0c;其强大的功能和灵活性为开发者提供了极大的便利。无论是个人项目还是团队协作&#xff0c;Git都扮演着不可或缺的角色。本文将详细总结Git的常用指令&#xff0c;帮助大家更好地掌握这一工…

九大B端开源组件库:总览篇,B端设计绕不开的话题。

如果你经常接触B端设计&#xff0c;开源组件库是各个绕不开的话题&#xff0c;市场上的组件库林林总总&#xff0c;本次做一个总体介绍&#xff0c;后面有机会再分开详细介绍。 一、最常用的组件库&#xff0c;推出的时间。 自Bootstrap诞生后&#xff0c;B端PC中后台组件库如…

爬虫代理API的全面解析:让数据抓取更高效

在大数据时代&#xff0c;网络爬虫已经成为收集和分析数据的重要工具。然而&#xff0c;频繁的请求会导致IP被封禁&#xff0c;这时候爬虫代理API就显得尤为重要。本文将详细介绍爬虫代理API的作用、优势及如何使用&#xff0c;帮助你更高效地进行数据抓取。 什么是爬虫代理AP…

C++刷怪笼(5)内存管理

一.前言 学习完类和对象之后&#xff0c;我们对C有了基本的了解&#xff0c;但是我们对于C的学习&#xff0c;除了广度&#xff0c;还需要深度&#xff0c;今天让我们走进底层&#xff0c;看看C对其内存是如何进行管理的。 二.正文 我们对这段代码进行详细的分析如下图&#…

技术美术一百问(02)

问题 前向渲染和延迟渲染的流程 前向渲染和延迟渲染的区别 G-Buffer是什么 前向渲染和延迟渲染各自擅长的方向总结 GPU pipeline是怎么样的 Tessellation的三个阶段 什么是图形渲染API? 常见的图形渲染API有哪些&#xff1f; 答案 1.前向渲染和延迟渲染的流程 【例图…

使用Rust直接编译单个的Solidity合约

这里写自定义目录标题 使用Rust直接编译单个的Solidity合约前言预备知识准备工作示例 使用Rust直接编译单个的Solidity合约 前言 我们知道&#xff0c;我们平常开发Solidity智能合约时一般使用Hardhat框架&#xff0c;但是如果你是一个Rustacean (这是由 “Rust” 和 “crust…

2024年【中级消防设施操作员(考前冲刺)】及中级消防设施操作员(考前冲刺)模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 中级消防设施操作员&#xff08;考前冲刺&#xff09;根据新中级消防设施操作员&#xff08;考前冲刺&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将中级消防设施操作员&#xff08;考前冲刺&#xf…

设计模式之建造者模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、建造者模式2、建造者模式使用场景3、优点4、缺点5、主要角色6、代码示例&#xff1a;1&#xff09;实现要求2&#xff09;UML图3)实现步骤&#xff1a;1&#xff09;创建一个表示食物条目和食物包装的接口2&#xff09;创建实现Packing接口的实体类3&a…

golang 字符串浅析

go的字符串是只读的 测试源代码 package mainimport ("fmt""unsafe" )func swap(x, y string) (string, string) {return y, x }func print_string(obj *string, msg string) {string_ptr : (*[2]uintptr)(unsafe.Pointer(obj))first_obj_addr : string_…

MySQL系列—13.事务

1、事务 事务是逻辑上的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 事务控制语法 - 事务开始 begin; - 事务提交&#xff0c;提交后就会写入物理磁盘中去 commit; - 事务回滚&#xff0c;事务提交后&#xff0c;无法回滚 rollback;事务的四大特性&#xff0…

基于51单片机的温度电流电压检测系统(压力、电压、温度、电流、LCD1602)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;通过DS18B20检测温度&#xff0c;滑动变阻器连接数模转换器模拟电流、电压&#xff0c;通过LCD1602显示&#xff0c;程序里设置温度阈值为40&#xff0c;电流阈值为60&am…