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

news2024/10/10 20:19:46

快乐数

题目: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 := 0
	var sum int64 = 0
	for !isInArr(arr, sum) {
		if sum != 0 {
			arr = append(arr, sum)
			n = int(sum)
			sum = 0
		}

		for n != 0 {
			m[wei] = int64(n) % 10
			n /= 10
			wei++
		}
		wei = 0

		for k, v := range m {
			sum += v * v
			delete(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 := 0
	var sum int64 = 0
	ok := false
	for !ok {
		if sum != 0 {
			res[sum] = struct{}{}
			n = int(sum)
			sum = 0
		}

		for n != 0 {
			m[wei] = int64(n) % 10
			n /= 10
			wei++
		}
		wei = 0

		for k, v := range m {
			sum += v * v
			delete(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, n
	sn := s
	s = 0
    // Go中不存在do while,所以需要先单独执行一遍,将第一个f==s 跳过
	for sn != 0 {
		s += (sn % 10) * (sn % 10)
		sn /= 10
	}
	for i := 0; i < 2; i++ {
		fn := f
		f = 0
		for fn != 0 {
			f += (fn % 10) * (fn % 10)
			fn /= 10
		}
	}
	for f != s {
		// s 走一步
		sn = s
		s = 0
		for sn != 0 {
			s += (sn % 10) * (sn % 10)
			sn /= 10
		}
		// f走两步

		for i := 0; i < 2; i++ {
			fn := f
			f = 0
			for fn != 0 {
				f += (fn % 10) * (fn % 10)
				fn /= 10
			}
		}
	}
	if f == 1 {
		return true
	} else {
		return false
	}
}

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

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

相关文章

正弦实时数据库(SinRTDB)的使用(5)-历史数据查询

前文已经将正弦实时数据库的使用进行了介绍&#xff0c;需要了解的可以先看下面的博客&#xff1a; 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入OPC DA的数据 正弦实时数据库(SinRTDB)…

全国产数据采集卡定制,24位八通道以太网数据采集卡 labview 100K采样

XM702是一款以太网型高速数据采集卡&#xff0c;具有8通 道真差分输入&#xff0c;24位分辨率&#xff0c;单通道最高采样率100ksps八通 道同步共计800ksps、精密前置增益放大、集成IEPE/ICP硬件 支持的特点。本产品采用了多个高精度24位ADC单元及配合本 公司多年积累开发的前置…

Linux: 检测工具: monit: cpu占用率的一个例子

最近看到monit使用的CPU有时候会突然的增加,通过perf查看,可以看到是下面这个函数调用占用的比较高。 Overhead Comma Shared Object Symbol 29.72% monit [kernel.kallsyms] [k] __d_lookup__d_lookup29.65% d_lookup proc_fill_cache ` proc_readfd_common iterate_dir ksy…

(2024,嵌套标记化,区域编码器,上下文编码器,Transformer-XL,Mamba)xT:大图像中更大上下文的嵌套标记化

xT: Nested Tokenization for Larger Context in Large Images 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 背景 3.1. 长上下文模型作为上下文编码器 3.2. 线性注意机…

2024年妈妈杯数学建模思路B题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

如何在 Oracle 中使用 CREATE SEQUENCE 语句

在本文中&#xff0c;我们将讨论 Oracle CREATE SEQUENCE 语句&#xff0c;其主要目的是提供一种可靠的方法来生成唯一且连续的数值&#xff0c;通常用于数据库表中的主键字段。此功能对于维护数据完整性和效率、确保不同记录之间的标识符有序分配尤其重要。从本质上讲&#xf…

数据库的横表和竖表

先来看个图: 定义如下&#xff1a; 横表&#xff1a;在一行数据中包含了所有的属性&#xff0c;一行就代表了一个完整的实体 竖表&#xff1a;在一行中只存储一个实体的一个属性&#xff0c;多个行组合在一起才组成一个完整的属性适用场景&#xff1a; 横表&#xff1a;对查…

从零玩转CanMV-K230(2)-开发环境搭建

文章目录 前言一、编译环境搭建二、镜像烧写总结 前言 本章介绍如何搭建CanMV-K230开发环境&#xff0c;基于LinuxRT-smart双系统开发 一、编译环境搭建 我是用的vmware虚拟机&#xff1a;ubuntu 20.04&#xff0c;搭建环境如下&#xff1a; 直接下载压缩包&#xff0c;下载…

【CTFshow 电子取证】套的签到题

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

一、JAVA集成海康SDK

JAVA集成海康SDK 文章目录 JAVA集成海康SDK前言一、项目依赖 jar1. examples.jar2. 项目依赖 jna.jar,可以通过 maven依赖到。二、集成SDK1.HcNetSdkUtil 海康 SDK封装类2.HCNetSDK3.Linux系统集成SDK三、总结前言 提示:首先去海康官网下载 https://open.hikvision.com/dow…

56、FreeRTOS/GPIO与定时器相关学习20240329

一、代码实现控制开发板上的指示灯闪烁。 /* USER CODE BEGIN 0 */ //利用定时器机制 定时器溢出时对应的回调函数实现如下 //本次实现控制PB0&#xff0c;PB1两个灯 int flag1 0,flag2 0;//使用一个标记执行以下代码 会造成一个灯常亮 另一个常灭 void HAL_TIM_PeriodElaps…

vue3+ts白屏问题解决

文章目录 打开白屏解决方法可能出现问题使用base导致的使用baseUrl导致的 注意点vue3ts白屏问题知识分享 打开白屏 解决方法 在vue.config.js页面 添加publicPath:./, const { defineConfig } require(vue/cli-service)module.exports defineConfig({ transpileDependenci…

Nginx-记

Nginx是一个高性能的web服务器和反向代理服务器&#xff0c;用于HTTP、HTTPS、SMTP、POP3和IMAP协议。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 &#xff08;1&#xff09;更快 这表现在两个方面&#xff1a;一方面&#xff0c;在正常情况下&…

工业无线网关在汽车制造企业的应用效果和价值-天拓四方

随着智能制造的快速发展&#xff0c;工业无线网关作为关键通信设备&#xff0c;在提升生产效率、优化生产流程、实现设备间的互联互通等方面发挥着越来越重要的作用。以下是一个关于工业无线网关在智能制造行业应用的具体案例&#xff0c;展示了其在实际生产中的应用效果和价值…

Nomad Web更新没有最快只有更快

大家好&#xff0c;才是真的好。 很长时间没介绍运行在浏览器中的Notes客户端即Nomad Web更新情况。 不用安装&#xff0c;直接使用&#xff0c;还可以完美地兼容适应各种操作系统&#xff0c;Nomad Web一定是Notes/Domino产品现在和将来重点发展的用户访问模式。 不过&…

C语言例4-34:找出11~100所有不能被5整除的整数,要求在第n行输出10*n+1~10*(n+1)之间符合要求的数

代码如下&#xff1a; //找出11~100所有不能被5整除的整数&#xff0c;要求在第n行输出10*n1~10*(n1)之间符合要求的数 #include<stdio.h> int main(void) {int i;for(i11;i<100;i) //遍历11~100的所有整数{if(i%100){printf("\n");continue; /…

【Leetcode每日一题】 动态规划 - 不同路径(难度⭐⭐)(46)

1. 题目解析 题目链接&#xff1a;62. 不同路径 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 想要解决这个问题&#xff0c;我们得像个侦探一样&#xff0c;一步步地追踪路径&#xff0c;找出所有可能的走法。接下…

uinapp触底与下拉时间触发的使用

在UniApp中&#xff0c;onReachBottom 和 onPullDownRefresh 是两个重要的生命周期函数&#xff0c;分别用于处理页面滚动到底部时触发的事件和下拉刷新时触发的事件。 在页面的 .vue 文件中&#xff1a; <template> <view> <scroll-view scroll-y"tr…

STM32之HAL开发——串口配置(源码)

串口收发原理框图&#xff08;F1系列&#xff09; 注意&#xff1a;数据寄存器有俩个一个是收一个是发&#xff0c;但是在标准库或者HAL库中没有特别区分开来是俩个寄存器&#xff01; USART 初始化结构体详解 HAL 库函数对每个外设都建立了一个初始化结构体&#xff0c;比如 …

【八股】泛型

泛型存在的意义&#xff1f; 为了使相同的代码适用于多种数据类型&#xff0c;也就是代码复用。 参数类型上下限限制 <?> 无限制 <? extends E> 声明了类型的上界&#xff0c;表示参数类型可以是他或他的子类。 <? super E> 声明了类型的下界&#xf…