当前位置: 首页 > news >正文

【leetcode 力扣刷题】快乐数/可被k整除的最小整数(可能存在无限循环的技巧题)

可能存在无限循环的技巧题

  • 202. 快乐数
    • 数学分析
  • 1015. 可被k整除的最小整数
  • 数学分析

202. 快乐数

题目链接:202. 快乐数
题目内容:
在这里插入图片描述理解题意,快乐数就是重复每位数的平方之和得到的新数的过程,最终这个数能变成1。变成1以后,即便重复上述过程,也一直是1的循环,因此在重复得到新数的过程中,如果这个数等于1就停止。
问题:如果始终变不到1呢?题目中提到无限循环但始终变不到1,无限循环就意味着重复,如果重复找新数的过程中得到的数p在之前是出现过的,那么之后找到的数到下一次找到p前,都是重复出现的,直到变成p以后又继续循环。因此每次得到一个新数都要判断之前是否出现过,如果出现过就终止过程,返回false。
查找这个数是否出现过,用什么数据结构? 哈希表!【快速查找一个元素是否存在】 用什么实现哈希表呢?前面的题目有用到数组、set和map。 对于此题,一个数n,将其每位数求平方再相加这个重复过程中会得到多少种数是不确定的,因此不能用数组;map存<key,value>此题我们不需要value,只需要key,因此直接用set。
每次得到一个新数首先判断其每位数平方之后是否为1,是直接返回true;如果不是再判断这个数是否已经出现在set中,如果是,直接返回false;如果不是重复寻找新数的过程并重复上述判断。
代码如下(C++):

class Solution {
public://对整数n每位数求平方再相加求和的过程int getsum(int n){int sum = 0;while(n){sum+= (n%10) * (n%10);n= n/10;}return sum;}bool isHappy(int n) {//存出现过的数unordered_set<int> count;int sum = getsum(n);//每位数平方和不等于1才进入循环,找新数//如果等于1,即为快乐数while(sum != 1){//如果已经存在过,就进入循环了if(count.count(sum))return false;else count.insert(sum);//找新数sum = getsum(sum);}        return true;}
};

数学分析

一个数不是快乐数,那么就进入无限循环,但是万一这个循环内的数字特别大特别多呢?
力扣这道题的官方题解中,分析了9,99,……,9999999等这些共i位数字的最大的情况,各位平方求和后的数字:
在这里插入图片描述
题目中n<=2^31-1,也就是2147483648-1,最多10的10次方,而只有13位的数字,其各位平方之和才能上千。就算各位数平方之和达到了四位数,再求和一次就变成了三位数,再求和一次就变成了243以内。因此再大的数字经过各位数平方求和操作后,大小都会迅速下降,最终控制在243以内,要么进行循环,要么最终变成1。
所以实际上用数组实现哈希表也是可以的,初始化数组长度为243,元素全是0。代码如下(C++):

    bool isHappy(int n) {//用数组存出现过的数字int count[243] = {0};int sum = getsum(n);//每位数平方和不等于1才进入循环,找新数//如果等于1,即为快乐数while(sum != 1){//如果已经存在过,就进入循环了if( sum<=243 && count[sum-1])return false;//注意控制下标不要越界if( sum<= 243 )count[sum-1]++;//找新数sum = getsum(sum);}        return true;}

1015. 可被k整除的最小整数

题目链接:1015. 可被k整除的最小整数
题目内容:
在这里插入图片描述
理解题意:①正整数需要满足:能够被k整除的【即n%k=0】,仅包含数字1【比如11,1111,111…111等】;②满足①中的条件的n可能不止一个,那么要找其中最小的;③返回n的长度而不是数字n本身。
如何表示这样的n? 假设n初始化为1,然后逐渐增大n = n*10 + 1,直到找到n满足题意。但是这样的int类型的n最多只能有10位,继续增大n就超出了int类型的范围,即便是64位的带符号的整数(最大为18446744073709551616),n的长度也只有20。 因此不能直接用上式表示n,并且本题本身也不要求返回n而是n的长度。
解法

  • 用余数r来代替n:
    假设:n%k = r (即:n = k*i + r ,i≥1)
    那么:n’%k = (n*10+1)%k = (k*i*10 +r*10 +1) %k = (r*10+1)%k
    因此可以用 r*10+1代替n*10+1
    并且因需要求出n的长度,不需要记录n,因此用余数r来代替n
  • 如果无解就会出现循环,存在a>b(都是由数字1组成的),a%k = b%k ≠ 0,用哈希表(set)存出现过的余数,如果重复出现就表示进入循环无解:

【解法①】用哈希表存出现过的余数,如果再次出现说明进入循环无解:

class Solution {
public:int smallestRepunitDivByK(int k) {int res = 1 % k;int len = 1;//存出现过的余数unordered_set <int> set_res;//余数=0就不进入循环,直接返回结果while(res){//如果余数≠0且出现了重复,就直接返回if(set_res.count(res))  return -1;set_res.insert(res);res = (res * 10 + 1) % k;len++;}return len;}
};

【优化】实际上余数r的范围是0~k-1,总共k个数字,那么如果有解,循环k次内,一定会找到结果:

class Solution {
public:int smallestRepunitDivByK(int k) {int res = 1%k, len = 1;//最多循环k次for(int i = 0 ;i < k ;i++){if(!res) return len;res = (res*10 + 1)%k;len++;           }return -1;   }    
};

数学分析

  • 能够直观的知道k是否有解?
    如果k是2或者5的倍数,因为n是奇数肯定不能被2整除,因为n的末尾是1而不是0或者5,肯定不能被5整除。
  • 除2和5以外的k一定有解吗?
    假设有全是1的数字a和b对k同余,即a%k = b%k ,那么(a - b)%k = 0,而a - b = 11…1100…00,可以表示成a - b = (11…11)*(10^x),k不等于2和5的倍数,即k和10是互质的,a-b能够整除k的话,只能是(11…11)能够整除k,11…11恰好全是由1构成的,即11…11就是解,因此k如果不是2和5的倍数,就一定有解。
    代码实现(C++):因为k除2和5的倍数外一定有解,那么就一直寻找就行,直到余数=0
int smallestRepunitDivByK(int k) {//如果是2或者5的倍数无解直接返回-1if(k%2==0||k%5==0) return -1;//n=1,初始长度len=1	int len=1;//r表示余数,初始n=1,r=n%k=1%kint r=1%k;//只要余数r不为0,就没有找到可以整除k的数,继续循环while(r){len++;//末尾增加1r=r*10+1;//求余r=r%k;          }return len;
}

相关文章:

【leetcode 力扣刷题】快乐数/可被k整除的最小整数(可能存在无限循环的技巧题)

可能存在无限循环的技巧题 202. 快乐数数学分析 1015. 可被k整除的最小整数数学分析 202. 快乐数 题目链接&#xff1a;202. 快乐数 题目内容&#xff1a; 理解题意&#xff0c;快乐数就是重复每位数的平方之和得到的新数的过程&#xff0c;最终这个数能变成1。变成1以后&…...

Python 的下一代 HTTP 客户端

迷途小书童 读完需要 9分钟 速读仅需 3 分钟 1 环境 windows 10 64bitpython 3.8httpx 0.23.0 2 简介 之前我们介绍过使用 requests ( https://xugaoxiang.com/2020/11/28/python-module-requests/ ) 来进行 http 操作&#xff0c;本篇介绍另一个功能非常类似的第三方库 httpx&…...

网络安全---webshell实践

一、首先环境配置 1.上传文件并解压 2.进入目录下 为了方便解释&#xff0c;我们只用两个节点&#xff0c;启动之后&#xff0c;大家可以看到有 3 个容器&#xff08;可想像成有 3 台服务器就成&#xff09;。 二、使用蚁剑去连接 因为两台节点都在相同的位置存在 ant.jsp&…...

论AI GPT跨境贸易架构及其应用

摘要 2023年初,我司启动了智慧化跨境贸易供应链一体化平台的建设工作。我在该项目中担任系统架构设计师的职务,主要负责设计平台系统架构和安全体系架构。该平台以移动信息化发展为契机,采用”平台+AI”的模式解决现有应用的集中移动化需求。平台整体的逻辑复杂,对系统的高…...

github的CodeSpace如何对外提供TCP 端口服务?

github提供了codespace&#xff0c;一个IDE环境&#xff0c;可以远程以WEB的形式&#xff0c;运行VS code进行开发。 他会给你提供一个虚拟机&#xff0c;4核16G内存&#xff0c;还是很香的&#xff0c;比普通的VPS性能好多了。 缺点是没有独立的IP地址&#xff0c;无法对外进…...

借助Midjourney创作龙九子图

&#xff08;本文阅读时间&#xff1a;5 分钟&#xff09; 《西游记》中有这么一段描写&#xff1a; 龙王道&#xff1a;“舍妹有九个儿子。那八个都是好的。第一个小黄龙&#xff0c;见居淮渎&#xff1b;第二个小骊龙&#xff0c;见住济渎&#xff1b;第三个青背龙&#xff0…...

Azure存储访问层

blob数据的热访问层&#xff0c;冷访问层和存档访问层 Azure Blob 存储是一种托管对象存储服务&#xff0c;可用于存储和访问大量非结构化数据&#xff0c;如文本和二进制数据。Azure Blob 存储提供了三个不同层级的访问方式&#xff0c;以适应不同数据的使用模式和成本效益需…...

Unity进阶–通过PhotonServer实现人物移动和攻击–PhotonServer(五)

文章目录 Unity进阶–通过PhotonServer实现人物移动和攻击–PhotonServer(五)DLc&#xff1a; 消息类和通信类服务器客户端 Unity进阶–通过PhotonServer实现人物移动和攻击–PhotonServer(五) DLc&#xff1a; 消息类和通信类 Message namespace Net {public class Message{p…...

中间件: Redis安装与部署

单机部署 yum install -y epel-release yum install -y redissed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.conf sed -i "s/# requirepass foobared/requirepass abcd1234/g" /etc/redis.conf systemctl restart redis集群部署 启动6个redis节点…...

Java日志框架-JUL

JUL全称Java util logging 入门案例 先来看着入门案例&#xff0c;直接创建logger对象&#xff0c;然后传入日志级别和打印的信息&#xff0c;就能在控制台输出信息。 可以看出只输出了部分的信息&#xff0c;其实默认的日志控制器是有一个默认的日志级别的&#xff0c;默认就…...

【Java】智慧工地SaaS平台源码:AI/云计算/物联网/智慧监管

智慧工地是指运用信息化手段&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生态圈&#xff0c;并将此数据在虚拟现实环境下与物联网采集到的工程信息进行数据挖掘分析&#xff0c;提供过程趋势预测及专家预案&#xff0c;实现工程…...

Dodaf架构的学习分享

一.Dodaf的内容 Dodaf的背景 DODAF&#xff08;Department of Defense Architecture Framework&#xff09;起源于美国国防部&#xff0c;是一个用于支持复杂系统设计、规划和实施的架构框架。以下是DODAF的背景和起源&#xff1a; 复杂系统需求&#xff1a;在军事和国防领域&…...

听GPT 讲Prometheus源代码--discovery

Prometheus是一个开源的系统监控和警报工具包&#xff0c;以下是Prometheus源代码中一些主要的文件夹及其作用&#xff1a; cmd/&#xff1a;这个目录包含了Prometheus主要的命令行工具&#xff0c;如prometheus/&#xff0c;promtool/等。每个子目录都代表一个可执行的命令行应…...

HTTP 介绍

HTTP 介绍 HTTP 协议一般指 HTTP&#xff08;超文本传输协议&#xff09;。超文本传输协议&#xff08;英语&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议&#xff0c;是因特网…...

Rust语言深入解析:后向和前向链接算法的实现与应用

内容 - 第一部分 (1/3)&#xff1a; Rust&#xff0c;作为一个旨在提供安全、并行和高性能的系统编程语言&#xff0c;为开发者带来了独特的编程模式和工具。其中&#xff0c;对于数据结构和算法的实现&#xff0c;Rust提供了一套强大的机制。本文将详细介绍如何在Rust中实现后…...

快速提高写作生产力——使用PicGo+Github搭建免费图床,并结合Typora

文章目录 简述PicGo下载PicGo获取Token配置PicGo结合Typora总结 简述PicGo PicGo: 一个用于快速上传图片并获取图片 URL 链接的工具 PicGo 本体支持如下图床&#xff1a; 七牛图床 v1.0腾讯云 COS v4\v5 版本 v1.1 & v1.5.0又拍云 v1.2.0GitHub v1.5.0SM.MS V2 v2.3.0-b…...

Java方法的参数可以有默认值吗?

在日常web开发这种&#xff0c;controller层接受参数时可以通过RequestParam(requiredfalse)设置参数非必填。 所以就想Java的方法可以有非必填这种操作吗&#xff1f;网上搜了一下&#xff0c;发现不支持这种操作。 可以通过方法重载的方式来变相实现。不需要传这个参数就会…...

电子商务的安全防范

(1)安全协议问题&#xff1a;我国大多数尚处在 SSL&#xff08;安全套接层协议&#xff09;的应用上&#xff0c;SET 协议的应用还只是刚刚试验成功&#xff0c;在信息的安全保密体制上还不成熟&#xff0c;对安全协议 还没有全球性的标准和规范&#xff0c;相对制约了国际性…...

STM32开关输入控制220V灯泡亮灭源代码(附带PROTEUSd电路图)

//main.c文件 /* USER CODE BEGIN Header */ /********************************************************************************* file : main.c* brief : Main program body************************************************************************…...

Spring Boot配置文件

目录 1.配置文件的作用 2.配置文件的格式 3.properties配置文件说明 3.1 properties基本语法 3.2 读取配置文件信息 3.3 properties 缺点分析 4.yml 配置⽂件说明 4.1 yml 基本语法 4.2 yml 使⽤进阶 4.2.1 yml 配置不同数据类型及 null 4.2.2 配置对象 5.propert…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...