每日一题 --- 快乐数[力扣][Go]

快乐数

题目: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

方法一:

注意无限循环这个词,这代表一个数按照上述操作总会遇到曾经执行过的数。所以有如下写法:

func isHappy(n int) bool {//	定义一个切片存储每次计算后得到的值arr := make([]int64, 0)// 定义一个map存储各个位数m := make(map[int]int64)wei := 0var sum int64 = 0for !isInArr(arr, sum) {if sum != 0 {arr = append(arr, sum)n = int(sum)sum = 0}for n != 0 {m[wei] = int64(n) % 10n /= 10wei++}wei = 0for k, v := range m {sum += v * vdelete(m, k)}if sum == 1 {return true}}return false
}func isInArr(arr []int64, sum int64) bool {for _, i2 := range arr {if i2 == sum {return true}}return false
}

但是我们使用一个isInArr()函数检查结果是否已经出现过,这明显是浪费时间的。可以改为:使用map集合,结果作为key值,如果曾经存过直接返回false,遇到1返回true。

方法二:

map集合寻找值:

func isHappy(n int) bool {// 定义一个结果集res := make(map[int64]struct{})// 定义一个map存储各个位数m := make(map[int]int64)wei := 0var sum int64 = 0ok := falsefor !ok {if sum != 0 {res[sum] = struct{}{}n = int(sum)sum = 0}for n != 0 {m[wei] = int64(n) % 10n /= 10wei++}wei = 0for k, v := range m {sum += v * vdelete(m, k)}if sum == 1 {return true}_, ok = res[sum]}return false
}

这就结束了吗?NoNoNo!
在这里插入图片描述

有兴趣的可以看看这个题解:https://leetcode.cn/problems/happy-number/solutions/21454/shi-yong-kuai-man-zhi-zhen-si-xiang-zhao-chu-xun-h

因为不管是不是快乐数,最后总会陷入一个循环,所以我们只需要找出循环就行了。

找循环的方法前几天刚做过,就是快慢指针。

方法三:

func isHappy(n int) bool {// 快慢指针,f走两步,s走一步,如果有循环总会相遇,如果是1,又总会循环f, s := n, nsn := ss = 0// Go中不存在do while,所以需要先单独执行一遍,将第一个f==s 跳过for sn != 0 {s += (sn % 10) * (sn % 10)sn /= 10}for i := 0; i < 2; i++ {fn := ff = 0for fn != 0 {f += (fn % 10) * (fn % 10)fn /= 10}}for f != s {// s 走一步sn = ss = 0for sn != 0 {s += (sn % 10) * (sn % 10)sn /= 10}// f走两步for i := 0; i < 2; i++ {fn := ff = 0for fn != 0 {f += (fn % 10) * (fn % 10)fn /= 10}}}if f == 1 {return true} else {return false}
}

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

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

相关文章

GitLab更新失败(Ubuntu)

在Ubuntu下使用apt更新gitlab报错如下&#xff1a; An error occurred during the signature verification.The repository is not updated and the previous index files will be used.GPG error: ... Failed to fetch https://packages.gitlab.com/gitlab/gitlab-ee/ubuntu/d…

揭秘百度百科审核内幕,百科词条审核究竟需要多久?

百度百科作为国内最大的网络百科全书平台之一&#xff0c;致力于提供全面、准确的知识服务&#xff0c;同时也承担着审核百科词条的工作。在互联网时代&#xff0c;人们对信息的需求日益增长&#xff0c;因此百度百科的审核工作显得尤为重要。那么&#xff0c;百度百科词条审核…

Codigger用户篇:安全、稳定、高效的运行环境(二)

在当今数字化时代&#xff0c;随着云计算和大数据技术的飞速发展&#xff0c;分布式操作系统已成为支撑各类应用高效运行的关键基础设施。我们推出的Codigger分布式操作系统&#xff0c;正是为了满足用户对安全、稳定、高效私人应用运行环境的需求而精心设计的。上一次&#xf…

【大数据运维】minio 常见shell操作

文章目录 1. 安装2. 入门操作3. 命令帮助 1. 安装 下载 https://dl.min.io/client/mc/release/linux-amd64/ 赋权与使用 cp mc /usr/bin && chmod x /usr/bin/mc ./mc --help 2. 入门操作 # 添加minio到mc mc config host add minio_alias_name endpoint_adress …

素材投放效果追踪与精准识别:从数据洞察到策略优化的全方位解析

一、数据洞察&#xff1a;深度解析投放效果的核心指标在数字广告的世界里&#xff0c;数据是投放效果的晴雨表。通过深入的数据洞察&#xff0c;广告主可以清晰地掌握广告的实际表现&#xff0c;为后续的策略调整提供有力的支持。曝光量、点击率、转化率和投资回报率等指标&…

租用2核8G云服务器优惠价格258元一年、998元3年

京东云2核8G服务器优惠价格258元一年、998元三年&#xff0c;配置为2C8G-80G SSD系统盘-3M带宽-200G月流量 华北-北京&#xff0c;京东云服务器优惠活动页面 atengyun.com/go/jd 京东云2核8G服务器优惠价格 京东云&#xff1a;轻量云主机CPU内存&#xff1a;2C8G公网带宽&#…

Java基础之算数运算符的初级用法

运算符 运算符: 对字面量或者变量进行操作的符号 表达式: 用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式 不同运算符连接的表达式体现的是不同类型的表达式 一 .算数运算符 实践一下 加 减 乘 运行结果: 除 取模 运行结果 练习: 数值拆分 需求…

Windows Server 2022 使用ApacheDS用户远程桌面登录服务器

Windows Server 2022 使用ApacheDS用户远程桌面登录服务器 1、接上篇 Windows Server 2022 使用ApacheDS用户认证 使用Administrator用户远程登录192.168.1.100windows server&#xff0c;打开pGina软件 2、输入刚刚在ApacheDS中的新添加的用户测试一下&#xff0c;会自动添加…

顺丰接口接入-主要处理下单接口上电子面单上传问题

概述 最近接到一个需求&#xff0c;需要和顺丰接口对接。由于是第一次对接&#xff0c;就需要把所有的流程全部走一遍&#xff0c;从 注册到 关联API 以及代码测试&#xff0c;电子面单审核&#xff0c;上线&#xff0c;下面就分开来说明把。本来是想着偷懒来着&#xff0c;作…

伦敦银短线交易频率可以有多高?

伦敦银是很适合于短线交易的品种&#xff0c;至于交易的频率可以短到什么程度&#xff0c;取决于投资者采用的是手动交易&#xff0c;还是程序化的交易。高频交易&#xff08;HFT&#xff09;是一种利用计算机算法和高速网络进行的快速交易策略。高频交易者会利用复杂的数学模型…

如何选择指纹浏览器?盘点好用是防关联浏览器

在网络世界中&#xff0c;保护您的在线隐私和安全非常重要。反检测浏览器是专门为此诞生的工具&#xff0c;旨在通过更改浏览器指纹来帮助您做到这一点&#xff0c;它们使网站、广告商和其他人很难跟踪您的在线行为。 一、什么是反检测浏览器&#xff1f; 您是否想过网站如何检…

智慧工厂视频汇聚与安全风险智能识别预警方案设计与功能

在智慧工厂的建设中&#xff0c;智能视频监控方案扮演着至关重要的角色。它不仅能够实现全方位、无死角的监控&#xff0c;还能够通过人工智能技术&#xff0c;实现智能识别、预警和分析&#xff0c;为工厂的安全生产和高效运营提供有力保障。 TSINGSEE青犀智慧工厂智能视频监…