当前位置: 首页 > 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…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

Linux安全加固:从攻防视角构建系统免疫

Linux安全加固:从攻防视角构建系统免疫 构建坚不可摧的数字堡垒 引言:攻防对抗的新纪元 在日益复杂的网络威胁环境中,Linux系统安全已从被动防御转向主动免疫。2023年全球网络安全报告显示,高级持续性威胁(APT)攻击同比增长65%,平均入侵停留时间缩短至48小时。本章将从…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...