【1015. 可被 K 整除的最小整数】

news2024/12/24 22:02:26

来源:力扣(LeetCode)

描述:

给定正整数 k ,你需要找出可以被 k 整除的、仅包含数字 1 的最 正整数 n 的长度。

返回 n 的长度。如果不存在这样的 n ,就返回 -1

注意: n 不符合 64 位带符号整数。

示例 1:

输入:k = 1
输出:1
解释:最小的答案是 n = 1,其长度为 1

示例 2:

输入:k = 2
输出:-1
解释:不存在可被 2 整除的正整数 n 。

示例 3:

输入:k = 3
输出:3
解释:最小的答案是 n = 111,其长度为 3

提示:

  • 1 <= k <= 105

方法:遍历

思路与算法

题目要求出长度最小的仅包含的 1 的并且被 k 整除的正整数。我们从 n = 1 开始枚举,此时对 k 取余得余数 resid = 1 mod k。如果 resid 不为 0,则表示 n 当前还不能被 k 整除,我们需要增加 n 的长度。令 nnew = nold ×10 + 1,residnew = nnew mod k 。将 nold 代入其中可得:

1

从上式可以发现,新的余数 residnew 可以由 residold 推导得到。因此在遍历过程中不需要记录 n,只需记录 resid。由于 resid 是对 k 取余之后的余数,因此种类数不会超过 k。

在遍历过程中如果出现重复的 resid,表示遇到了一个循环,接着遍历下去会重复循环中的每一步,不会产生新的余数。所以我们用一个哈希表记录出现过的余数,当更新 resid 后发现该值已经在哈希表时,直接返回 −1。否则我们一直遍历,直到 resid 变为 0。最终哈希表中的元素个数或者遍历次数就是实际 n 的长度。

代码:

class Solution {
public:
    int smallestRepunitDivByK(int k) {
        int resid = 1 % k, len = 1; // resid为余数,len为数字长度,初始值为1
        unordered_set<int> st; // 创建一个无序集合,用于存储余数
        st.insert(resid); // 插入余数1
        while (resid != 0) { // 当余数为0时退出循环
            resid = (resid * 10 + 1) % k; // 计算下一个余数
            len++; // 数字长度+1
            if (st.find(resid) != st.end()) { // 如果余数重复出现,则无解
                return -1;
            }
            st.insert(resid); // 将余数插入集合
        }
        return len; // 返回数字长度
    }
};

优化

注意到当 k 为 2 或者 5 的倍数时,能够被 k 整除的数字末尾一定不为 1,所以此时一定无解。

那当 k 不为 2 或者 5 的倍数时一定有解吗?我们做进一步的分析。

resid 随着 1 的增加,最后一定进入循环,我们能找到两个对 k 同余的 n 和 m。假设 n > m,那么一定有以下等式成立:

(n − m) ≡ 0 (mod k)

n − m 可以表示为 11…100…0 的形式,因此有 11 … 100 … 0 ≡ 0(mod k)。

如果此时 k 不为 2 或 5 的倍数,则 k 与 10 没有公因数,k 与 10 互质。n − m 末尾的 0 可以除掉,因此 11…1 ≡ 0(mod k),问题一定有解。

代码:

class Solution {
public:
    int smallestRepunitDivByK(int k) {
        // 若 k 能被 2 或 5 整除,则无解,返回 -1
        if (k % 2 == 0 || k % 5 == 0) {
            return -1;
        }
        // 初始化余数为 1,表示一个数的最低位是 1
        int resid = 1 % k, len = 1;
        // 若余数不为 0,继续迭代
        while (resid != 0) {
            // 计算下一个数的余数,下一个数在当前余数后加一个 1
            resid = (resid * 10 + 1) % k;
            len++;
        }
        // 返回数字 1 的最小重复次数
        return len;
    }
};

执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:5.7 MB, 在所有 C++ 提交中击败了93.94%的用户
复杂度分析
时间复杂度:O(k)。过程中最多会遍历 k 次。
空间复杂度:O(1)。如果使用哈希表,空间复杂度为 O(k)。
author:LeetCode-Solution

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

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

相关文章

手把手教你在winform中将文本或文件路径拖到控件中

文章目录 前言博主履历介绍&#xff1a;一、将txt文件的所有内容复制到 RichTextBox中二、将txt文件的一行内容移动到RichTextBox中三、将多个文件的全路径复制到 RichTextBox中四 、源码1、[Winform从入门到精通&#xff08;1&#xff09;——&#xff08;如何年入30万&#x…

「MIAOYUN」:降本增效,赋能传统企业数字化云原生转型 | 36kr 项目精选

作为新经济综合服务平台第一品牌&#xff0c;36氪自2019年落地四川站以来&#xff0c;不断通过新锐、深度的商业报道&#xff0c;陪跑、支持四川的新经济产业。通过挖掘本土优质项目&#xff0c;36氪四川帮助企业链接更多资源&#xff0c;助力企业成长&#xff0c;促进行业发展…

分布式系统概念和设计——命名服务设计和落地经验

分布式系统概念和设计 通过命名服务&#xff0c;客户进程可以根据名字获取资源或对象的地址等属性。 被命名的实体可以是多种类型&#xff0c;并且可由不同的服务管理。 命名服务 命名是一个分布式系统中的非常基础的问题&#xff0c;名字在分布式系统中代表了广泛的资源&#…

C语言:指针求解鸡兔同笼问题

题目&#xff1a;鸡兔同笼问题 要求&#xff1a;使用自定义函数void calc(int h, int f,int *c,int *r) 求解鸡兔同笼问题。 h 表示总的头数&#xff0c;f 表示总的脚数。 例子&#xff1a; 输入&#xff1a; 5 16 输出&#xff1a; 2 3 分析&#xff1a; 在该代码中&a…

05-Docker安装Mysql、Redis、Tomcat

Docker 安装 Mysql 以安装 Mysql 5.7为例&#xff1a; docker pull mysql:5.7Mysql 单机 Mysql 5.7安装 启动 Mysql 容器&#xff0c;并配置容器卷映射&#xff1a; docker run -d -p 3306:3306 \--privilegedtrue \-v /app/mysql/log:/var/log/mysql \-v /app/mysql/data:…

ASP.NET Core MVC 从入门到精通之文件上传

随着技术的发展&#xff0c;ASP.NET Core MVC也推出了好长时间&#xff0c;经过不断的版本更新迭代&#xff0c;已经越来越完善&#xff0c;本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容&#xff0c;适用于初学者&#xff0c;在校毕业生&#xff0c…

VMware NSX-T Data Center 3.2.2.1 - 数据中心网络全栈虚拟化

请访问原文链接&#xff1a;https://sysin.org/blog/vmware-nsx-t-3/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org VMware NSX-T Data Center 3.2.2.1 | 30 MAR 2023 | Build 21487560 VMware NSX-T Data Center 3.2.2 | 08 …

NOA上车「清一色」自主品牌,哪些供应商正在突围前线

随着入门级L2进入普及周期&#xff0c;以NOA&#xff08;高速、城区&#xff09;为代表的L2/L2赛道&#xff0c;正在成为主机厂、硬件供应商、算法及软件方案商的下一波市场制高点的争夺阵地。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-3月中国市场&#xff08;不含…

MySQL基础(十六)变量、流程控制与游标

1. 变量 在MySQL数据库的存储过程和函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据。 在 MySQL 数据库中&#xff0c;变量分为系统变量以及用户自定义变量。 1.1 系统变量 1.1.1 系统变量分类 变量由系统定义&#xff…

【Nacos在derby模式下密码忘记】使用derby的ij工具重置密码/修改密码

【问题描述】 nacos部署未用mysql,直接运行&#xff0c;使用了默认的derby数据库&#xff0c;这时候不一小心修改的密码给忘记了&#xff0c;无法登录 当时是部署在centos上的一个演示环境&#xff0c;没有采用mysql数据库&#xff0c;如果生产上&#xff0c;建议使用mysql。 …

php用户分享信息技术交流大学生论坛系统vue

系统应实现的目标 1. 提供安全、友好的操作环境&#xff1a;避免一些网上的不良言论&#xff0c;创造一个和谐的网络环境。 2. 提供发表帖子功能&#xff1a;注册的用户可以自由发帖&#xff0c;发表符合法律法规的言论。 3. 提供回复帖子功能&#xff1a;户可以自由回复&am…

camunda执行监听器如何使用

在Camunda工作流引擎中&#xff0c;执行监听器是一种机制&#xff0c;用于在业务流程执行期间捕获特定事件并执行相应的操作。它们可以帮助您实现一些重要的任务&#xff0c;例如&#xff1a; 1、记录或更新业务数据&#xff1a;当流程中的任务或事件发生时&#xff0c;您可以…

工程监测无线中继采集发送仪 指示灯功能说明及接口定义

工程监测NLM5无线中继采集发送仪 指示灯功能说明及接口定义 指示灯功能说明 标识 名称 状态 描述说明 备注说明 CHG 正在充电 常亮 正在充电 DON 充电完成 常亮 已充满 POW 电源指示 常亮 外部电源已连接 仅用于指示是否连接了外部电源 熄灭 无外部电源 SIG 空 RUN 运行状态 闪…

“数字社区”诞生 “智慧大脑”助力提升社区综合治理效能

近日&#xff0c;民政局等9部门印发的《关于深入推进智慧社区建设的意见》提出&#xff0c;到2025年&#xff0c;基本构建起网格化管理、精细化服务、信息化支撑、开放共享的智慧社区服务平台&#xff0c;初步打造成智慧共享、和睦共治的新型数字社区。 数字社区建设是智慧城市…

最优化理论-线性规划解的几何特征

目录 一、引言 二、线性规划的定义 三、线性规划的几何特征 1.可行域 2.最优解 3.等价约束 4.对偶问题 四、线性规划的应用 五、结论 一、引言 最优化理论是数学中的一个重要分支&#xff0c;它研究如何在给定的约束条件下&#xff0c;寻找一个最优解。其中&#xff…

【MySql】数据库索引

数据库索引 索引索引的创建索引的查看索引的删除 聚簇索引 & 非聚簇索引聚簇索引非聚簇索引 索引创建原则 索引 可以简单理解为一本书的目录信息&#xff0c;是为了提升查找效率而建立的 索引的创建 1、在创建一个主键、唯一键、外键时候&#xff0c;数据库会自动地针对查…

Express框架的安装和使用

1.Express框架简介 Node.js的web框架发展至今,第一个知名的框架为Connect框架.它类似一个中间件的脚手架.只提供逻辑,不实现具体的处理逻辑.中间件概念的引入Express框架奠定了基础. 2.Express框架的安装 安装分为局部安装和全局安装. 2.1局部安装 1.在D盘创建expressStud…

html实现开心消消乐小游戏

文章目录 1.设计来源1.1 游戏界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/130594511 html实现开心消消乐小游戏源码 《开心消消乐》 是一款三消游戏&#xff0c;游…

站群服务器和普通服务器区别

更有利于提升 站群服务器指的是对于站群系统提升客户开发设计的网络服务器&#xff0c;客户租服务器来置放好几个网站&#xff0c;许多客户以便免费在线上扩大曝出会挑选提升好几个网站。非站群服务器&#xff0c;基础只有置放两三个网站&#xff0c;并且在管理方法时也…

跨模态检索论文泛读:VisualSparta-利用加权的词袋进行大规模的文本到图像的检索

ACL2021 | 利用加权的词袋进行大规模的文本到图像的检索 VisualSparta: An Embarrassingly Simple Approach to Large-scale Text-to-Image Search with Weighted Bag-of-words主打速度&#xff01; 简介 目前的跨模态检索方法主要分为查询相关和查询无关两种。查询无关的方法…