LeetCode 2442:统计反转后的不同整数数量
目录
核心思想:数字的“拆分”与“重组”
分步拆解(以输入 123 为例)
关键操作详解
为什么能处理中间或末尾的0?
数学本质
总结
题目描述
解题思路
代码实现
代码解析
复杂度分析
示例演示
总结
核心思想:数字的“拆分”与“重组”
假设原数字是 123,它的每一位可以表示为:
123 = 1×100 + 2×10 + 3×1
反转后的数字是 321,即:
321 = 3×100 + 2×10 + 1×1
函数通过循环逐步“拆解”原数字的每一位,再“重组”到结果中。
分步拆解(以输入 123
为例)
循环次数 | num | num%10(取末位) | res = res*10 + 末位 | num = parseInt(num/10) |
---|---|---|---|---|
初始值 | 123 | - | 0 | - |
第一次循环 | 123 | 3 | 0×10 + 3 = 3 | 123→12 |
第二次循环 | 12 | 2 | 3×10 + 2 = 32 | 12→1 |
第三次循环 | 1 | 1 | 32×10 + 1 = 321 | 1→0 |
循环结束,返回 res=321
。
关键操作详解
-
取末位(
num % 10
)
%
是取余操作,比如123%10=3
,12%10=2
,1%10=1
。
这相当于每次取出num
的最后一位数字。 -
重组(
res = res*10 + 末位
)-
res*10
:将当前结果左移一位(腾出个位)。 -
+ 末位
:将新提取的末位填入个位。
比如: -
初始
res=0
→ 填入3 →res=3
-
下次循环
res=3×10=30
→ 填入2 →res=32
-
最后
res=32×10=320
→ 填入1 →res=321
-
-
去掉末位(
num = parseInt(num/10)
)
除以10后取整,相当于去掉最后一位。
例如:123→12
,12→1
,1→0
(循环终止)。
为什么能处理中间或末尾的0?
-
末尾的0(如输入
1200
)
第一次循环提取末位0 →res=0×10+0=0
,num=120
第二次循环提取末位0 →res=0×10+0=0
,num=12
第三次循环提取2 →res=0×10+2=2
,num=1
第四次循环提取1 →res=2×10+1=21
,num=0
最终结果是21
,末尾的0被自动“舍弃”。 -
中间的0(如输入
10203
)
反转后为30201
,中间的0会被保留,因为每次循环都会严格按顺序提取数字。
数学本质
原数字可以表示为:
num = a×10ⁿ + b×10ⁿ⁻¹ + ... + z×10⁰
反转后的数字则是:
res = z×10ⁿ + ... + b×10¹ + a×10⁰
函数通过循环逐步剥离原数字的每一位(从低位到高位),再按反方向重组。
总结
这个算法的精妙之处在于:
-
逐位处理:每次只操作一位数字。
-
数学重组:通过
res*10 + 末位
直接构建反转后的数字。 -
无需字符串转换:效率高,且适用于大数字(但需注意JavaScript的数值范围限制)。
通过这种“拆解-重组”的数学方法,可以高效地完成整数反转。
题目描述
给定一个整数数组 nums
,要求将每个元素反转后添加到原数组中,最终统计所有不同整数的数量。
示例:
输入:nums = [123, 456]
输出:4
解释:原数组为 [123, 456]
,反转后得到 [321, 654]
,合并后的数组为 [123, 456, 321, 654]
,共有 4
个不同整数。
解题思路
-
核心目标
-
对每个元素执行反转操作,生成新数字。
-
合并原数组和反转后的所有数字,统计不重复的整数数量。
-
-
关键操作
-
反转数字:将数字逐位拆解,按反方向重组(如
123
→321
)。 -
去重统计:利用集合(
Set
)自动去重的特性,存储所有数字。
-
-
算法步骤
-
初始化一个集合,存储原数组的所有元素。
-
遍历数组,对每个元素进行反转,并将结果加入集合。
-
最终返回集合的大小。
-
代码实现
var countDistinctIntegers = function (nums) {const set = new Set(nums); // 初始化集合,存储原数组元素for (let i = 0; i < nums.length; i++) {set.add(resver(nums[i])); // 将反转后的数字加入集合}return set.size; // 返回集合大小(即不同整数数量)
};// 反转数字函数
const resver = (num) => {let res = 0;while (num > 0) {res = res * 10 + (num % 10); // 提取末位并重组num = parseInt(num / 10); // 去掉末位}return res;
};
代码解析
-
集合去重(
Set
)-
new Set(nums)
直接将原数组元素存入集合,自动去重。 -
遍历时,通过
set.add()
将反转后的数字加入集合,避免重复存储。
-
-
反转函数
resver
-
逐位提取:
num % 10
获取末位数字(如123 % 10 = 3
)。 -
重组数字:
res = res * 10 + 末位
将新数字左移后填入末位(如0 → 3 → 32 → 321
)。 -
去掉末位:
parseInt(num / 10)
去掉已处理的末位(如123 → 12
)。
-
-
边界处理
-
数字0:若
num = 0
,循环直接结束,返回res = 0
,确保反转结果正确。 -
末尾0:如
120
反转后为21
,自动忽略前导零。
-
复杂度分析
-
时间复杂度:
-
反转单个数字的时间为
O(d)
(d
为数字的位数)。 -
遍历数组的时间为
O(n)
,总时间复杂度为 O(n·d)。
-
-
空间复杂度:
-
集合存储最多
2n
个元素(原数组和反转结果),空间复杂度为 O(n)。
-
示例演示
以输入 nums = [123, 121]
为例:
-
原数组元素存入集合:
Set {123, 121}
。 -
反转
123
得到321
,集合变为{123, 121, 321}
。 -
反转
121
得到121
(与原数字相同),集合保持{123, 121, 321}
。 -
最终结果:
3
个不同整数。
总结
-
集合去重:利用
Set
特性高效去重,避免手动判断重复。 -
逐位反转:通过数学运算逐位拆解和重组,无需字符串转换,时间复杂度低。
-
适用性:该方法适用于大整数场景(需注意 JavaScript 的数值范围限制)。
通过结合集合的自动去重和数学反转方法,代码简洁高效地解决了问题。
相关文章:
LeetCode 2442:统计反转后的不同整数数量
目录 核心思想:数字的“拆分”与“重组” 分步拆解(以输入 123 为例) 关键操作详解 为什么能处理中间或末尾的0? 数学本质 总结 题目描述 解题思路 代码实现 代码解析 复杂度分析 示例演示 总结 核心思想:…...
获取inode的完整路径包含挂载的路径
一、背景 在之前的博客 缺页异常导致的iowait打印出相关文件的绝对路径-CSDN博客 里的 2.2.3 一节和 关于inode,dentry结合软链接及硬链接的实验-CSDN博客 里,我们讲到了在内核里通过inode获取inode对应的绝对路径的方法。对于根目录下的文件而言&#…...
解决上传PDF、视频、音频等格式文件到FTP站点时报错“将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上”问题
一、问题描述 可以将文本文件(.txt格式),图像文件(.jpg、.png等格式)上传到我们的FTP服务器上;但是上传一些PDF文件、视频等文件时就会报错“ 将文件复制到FTP服务器时发生错误。请检查是否有权限将文件放到该服务器上。 详细信息: 200 Type set to l. 227 Entering Pas…...
git push
在 git push 命令中,分支名称的顺序和含义非常重要。其基本格式如下: git push <remote> <local_branch>:<remote_branch>各部分解释 <remote>:远程仓库的名称(如 origin)。<local_branc…...
Java中的四大引用类型详解
Java中的四大引用类型详解:强引用、软引用、弱引用、虚引用 1. 引用类型概览 Java提供了四种不同强度的引用类型,用于控制对象的生命周期和垃圾回收行为: 引用类型回收时机典型应用场景是否影响GC强引用永不回收(除非断开引用&…...
MySQL慢查询日志通俗指南
🍀 前言 如果你发现自己新写或者重写的接口查询速度变慢,你怎么定位原因呢?可以用explain分析我们的SQL原生代码,又或者可以考虑使用MySQL慢查询日志。这篇文章主要讲述什么是慢查询日志以及开发中可能用到的场景。 但是&#x…...
Kafka 如何保证消息可靠性?
Kafka 保证消息可靠性主要通过以下几个机制来实现,从生产者到消费者的整个链路上都设计了相应的保障措施: 1. 生产者(Producer)端的可靠性 ✅ a. acks 参数(确认机制) acks0:生产者不等待任何…...
【嵌入式系统设计师】知识点:第2章 嵌入式系统硬件基础知识
提示:“软考通关秘籍” 专栏围绕软考展开,全面涵盖了如嵌入式系统设计师、数据库系统工程师、信息系统管理工程师等多个软考方向的知识点。从计算机体系结构、存储系统等基础知识,到程序语言概述、算法、数据库技术(包括关系数据库、非关系型数据库、SQL 语言、数据仓库等)…...
C++重载运算符的本质
C 中运算符重载的本质就是函数调用,编译器会将运算符表达式转换为对特定函数的直接调用。以下是具体原理和实现细节: 1. 运算符重载的底层实现 当重载一个运算符(如 、、<<)时,实际上是在定义一个特殊名称的函数…...
Python解决“数字插入”问题
Python解决“数字插入”问题 问题描述测试样例解题思路代码 问题描述 小U手中有两个数字 a 和 b。第一个数字是一个任意的正整数,而第二个数字是一个非负整数。她的任务是将第二个数字 b 插入到第一个数字 a 的某个位置,以形成一个最大的可能数字。 你…...
深入讲解:智能合约中的读写方法
前言 在探秘区块链开发:智能合约在 DApp 中的地位及与传统开发差异一文中我提到对于智能合约中所有的写入其实都算是交易。而在一个完整的智能合约代码中最大的两个组成部分就是读取和写入。 本文将为你深入探讨该两者方法之间的区别。 写方法 写方法其实就是对区块链这一…...
Java进阶之旅-day05:网络编程
引言 在当今数字化的时代,网络编程在软件开发中扮演着至关重要的角色。Java 作为一门广泛应用的编程语言,提供了强大的网络编程能力。今天,我们深入学习了 Java 网络编程的基础知识,包括基本的通信架构、网络编程三要素、IP 地址、…...
Eliet Chat开发日志:信令服务器注册与通信过程
目录 1. 架构设计:信令服务器与客户端 2. 选择技术栈 3. 实现信令服务器 4. 客户端实现 5. 测试 6. 下一步计划 日期:2025年4月5日 今天的工作重点是实现两个设备通过信令服务器注册并请求对方公网地址信息,以便能够进行点对点通信。我…...
如何设计一个本地缓存
想获取更多高质量的Java技术文章?欢迎访问Java技术小馆官网,持续更新优质内容,助力技术成长 Java技术小馆官网https://www.yuque.com/jtostring 如何设计一个本地缓存 随着系统的复杂性和数据量的增加,如何快速响应用户请求、减…...
2024版idea使用Lombok时报找不到符号
今天在springboot项目中使用Lombok的Builder注解,启动时居然报了找不到符号的错,如下图 于是开始了漫长的寻找之路,首先去settings->Plugins中看自己的Lombok插件是否启动,发现确实是如此,然后看网上的教程去加上这…...
[Android安卓移动计算]:新建项目和配置环境步骤
文章目录 一:AndroidStudio 创建项目1. New Project2. 选择:Empty Activity 二:配置和下载SDK点击SDK 配置按钮选择API32和Android 9.0(Pie)再点击Apply点击接受条款声明进行安装 安装完后点击NEXT和OK出现:…...
$R^n$平面约束下的向量列
原向量: x → \overset{\rightarrow}{x} x→ 与 x → \overset{\rightarrow}{x} x→法向相同的法向量(与 x → \overset{\rightarrow}{x} x→同向) ( x → ⋅ n → ∣ n → ∣ 2 ) n → (\frac{\overset{\rightarrow}x\cdot\overset{\righta…...
混合编程的架构
在混合使用QML和Qt Widgets的环境中,是否必须严格遵循分层架构需要根据项目规模和复杂度来决定。以下是具体的决策指南和实施建议: 一、分层架构的适用性分析 #mermaid-svg-61Mlp9MrpFOoZPAO {font-family:"trebuchet ms",verdana,arial,sans…...
联网汽车陷入网络安全危机
有人能够入侵并控制汽车这一事实本身就令人恐惧,电影中的场景变成了现实。再加上汽车中的软件会处理和存储我们的个人数据,这种恐惧达到了一个新的高度。 一旦发生安全漏洞,我们的驾驶数据、联系人、通话记录、消息甚至位置信息等信息都可能…...
基于Spark的招聘数据预测分析推荐系统
【Spark】基于Spark的招聘数据预测分析推荐系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统能够高效处理海量招聘数据,利用Spark的强大计算能力实现快速分析和预测。该系…...
基于Spark的酒店数据分析系统
【Spark】基于Spark的酒店数据分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本项目基于Python语言开发,借助Django进行后台框架的开发,搭建大数据虚拟机集群…...
网络安全L2TP实验
在FW1上,将接口g1/0/0添加进去trust区域 [USG6000V1]firewall zone trust [USG6000V1-zone-trust]add interface GigabitEthernet 1/0/0 在放通安全策略 在FW2上配置ip [USG6000V1]int g1/0/1 [USG6000V1-GigabitEthernet1/0/1]ip address 20.1.1.1 24 [USG6000…...
18.1.go连接redis
开发调试 Tiny RDM:跨平台GUI工具windows版本下载 https://download.csdn.net/download/chxii/90562932 支持多种格式查看:内置高级文本代码编辑器,支持语法高亮/代码折叠/错误提示 便捷搜索过滤:使用正则匹配搜索键后,仍可进行二级过滤,组合筛选数据更方便 调试分析…...
innodb如何实现mvcc的
InnoDB 实现 MVCC(多版本并发控制)的机制主要依赖于 Undo Log(回滚日志)、Read View(读视图) 和 隐藏的事务字段。以下是具体实现步骤和原理: 1. 核心数据结构 InnoDB 的每一行数据(…...
递归实现组合型枚举(DFS)
从 1∼n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。 输入格式 两个整数 n,m,在同一行用空格隔开。 输出格式 按照从小到大的顺序输出所有方案,每行 1 个。 首先,同一行内的数升序排列,相邻两个数用一个空格隔开。…...
【Java学习日记18】:三元运算符和运算符的优先级
一、三元运算符 2. 示例代码 例题1: 例题2: 二、运算符优先级 1. 优先级规则 Java 运算符的执行顺序由优先级决定,优先级高的先执行。 只要记住小括号优先级最大即可,以后就用这玩意 四、总结 运算符优先级:小括号 () 是最高优先级工具...
基于springboot放松音乐在线播放系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 本放松音乐在线播放系统采用B/S架构,数据库是MySQL,网站的搭建与开发采用了先进的Java进行编写,使用了Spring Boot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。前台主要功能包括:用户注册、登录…...
【Scratch编程系列】Scratch编程软件界面
Scratch是一款由麻省理工学院(MIT) 设计开发的少儿编程工具。其特点是:使用者可以不认识英文单词,也可以不使用键盘,就可以进行编程。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动指令模块到脚本区就可以了。 这个软…...
技术驱动革新,强力巨彩LED软模组助力创意显示
随着LED显示技术的不断突破,LED软模组因其独特的柔性特质和个性化显示效果,正逐渐成为各类应用场景的新宠。强力巨彩软模组R3.0H系列具备独特的可塑造型能力与技术创新,为商业展示、数字艺术、建筑装饰等领域开辟全新视觉表达空间。 LED…...
历年跨链合约恶意交易详解(三)——Nomad Bridge20220801
漏洞合约函数 /*** notice Given formatted message, attempts to dispatch* message payload to end recipient.* dev Recipient must implement a handle method (refer to IMessageRecipient.sol)* Reverts if formatted messages destination domain is not the Replicas d…...
Tensorflow、Pytorch与Python、CUDA版本的对应关系(更新时间:2025年4月)
更新时间:20250405 一、Tensorflow与Python 、CUDA版本对应关系 注意:从 TF 2.11 开始,Windows 不支持 CUDA 构建。要在 Windows 上使用 TensorFlow GPU,您需要在 WSL2 中构建/安装 TensorFlow 或将 tensorflow-cpu 与 TensorFlow-DirectML-Plugin 一起使用 1.1、CPU版本…...
FPGA实现按键切换流水灯不同亮灭模式
本文是一位fpga新手学习fpga的博客,写出这个shi山代码花了3个小时左右,途中学习了按键消抖、状态机等知识... 实现目标:通过按键控制led灯亮的不同模式,将每种模式用状态机表达。 代码如下: module led(input btn1,in…...
SeaTunnel系列之:部署SeaTunnel的Spark和Flink引擎
SeaTunnel系列之:部署SeaTunnel的Spark和Flink引擎 运行 SeaTunnel快速开始使用 Flink快速开始使用 Spark 运行 SeaTunnel 现在您已经下载了 SeaTunnel 二进制包和连接器插件。接下来,您可以选择不同的引擎选项来运行同步任务。 如果您使用 Flink 运行…...
“Pseudo Global Warming”:伪全球变暖PGW
“Pseudo Global Warming”:伪全球变暖PGW PGW方法概述🔍 一、PGW 方法的定义🧠 二、PGW 方法的基本原理🛠️ 三、PGW 方法的主要步骤📈 四、PGW 模拟时常涉及的变量📊 五、PGW 方法的优/缺点📚…...
【Linux学习笔记】初识进程概念和进程PCB
【Linux学习笔记】初识冯诺依曼体系和进程PCB 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】初识冯诺依曼体系和进程PCB前言一. 冯诺依曼体系结构1.1 关于冯诺依曼体系的要点: 二. 操…...
deepseek回答ollama 下载模型的命令
ollama 下载模型的命令 已深度思考(用时 20 秒) 好的,我需要回答用户关于使用Ollama下载模型的命令的问题。首先,我需要回忆Ollama的基本用法。Ollama是一个用于本地运行大型语言模型的工具,支持多种模型如Llama、Mi…...
Kafka 中的生产者分区策略
Kafka 中的 生产者分区策略 是决定消息如何分配到不同分区的机制。这个策略对 Kafka 的性能、负载均衡、消息顺序性等有重要影响。了解它对于高效地使用 Kafka 进行消息生产和消费至关重要。 让我们一起来看 Kafka 中 生产者的分区策略,它如何工作,以及…...
Kafka 如何调优?
Kafka 的调优是个非常实用又容易踩坑的话题,涉及 Producer、Broker、Consumer、硬件、操作系统 等多个层面。我们可以从整体架构角度出发,按模块逐个给你讲清楚 实战建议。 🎯 Kafka 调优主要目标: 提高吞吐量降低延迟保证可靠…...
【机器学习】机器学习工程实战-第4章 特征工程
上一章:第3章 数据收集和准备 文章目录 4.1 为什么要进行特征工程4.2 如何进行特征工程4.2.1 文本的特征工程4.2.2 为什么词袋有用4.2.3 将分类特征转换为数字4.2.4 特征哈希4.2.5 主题建模4.2.6 时间序列的特征4.2.7 发挥你的创造力 特征工程是将原始样本转化为特…...
spring-cloud-alibaba-nacos-config使用说明
一、核心功能与定位 Spring Cloud Alibaba Nacos Config 是 Spring Cloud Alibaba 生态中的核心组件之一,专为微服务架构提供动态配置管理能力。它通过整合 Nacos 的配置中心功能,替代传统的 Spring Cloud Config,提供更高效的配置集中化管理…...
必刷算法100题之计算右侧小于当前元素的个数
题目链接 315. 计算右侧小于当前元素的 个数 - 力扣(LeetCode) 题目解析 计算数组里面所有元素右侧比它小的数的个数, 并且组成一个数组,进行返回 算法原理 归并解法(分治) 当前元素的后面, 有多少个比我小(降序) 我们要找到第一比左边小的元素, 这…...
OpenHarmony子系统开发 - DFX(三)
OpenHarmony子系统开发 - DFX(三) 五、HiTraceMeter开发指导 HiTraceMeter概述 简介 HiTraceMeter在OpenHarmony中,为开发者提供业务流程调用链跟踪的维测接口。通过使用该接口所提供的功能,可以帮助开发者迅速获取指定业务流…...
[ctfshow web入门] web6
前置知识 入口点(目录)爆破 还记得之前说过网站的入口的吗,我们输入url/xxx,其中如果url/xxx存在,那么访问成功,证明存在这样一个入口点;如果访问失败则证明不存在此入口点。所以我们可以通过遍历url/xxx,…...
完整的Python程序,它能够根据两个Excel表格(假设在同一个Excel文件的不同sheet中)中的历史数据来预测未来G列数字
下面是一个完整的Python程序,它能够根据两个Excel表格(假设在同一个Excel文件的不同sheet中)中的历史数据来预测未来G列数字。此程序采用多模型验证,并且具备自我学习和动态参数调整的功能。最终会输出12个可能的数字范围及其出现…...
设计模式简述(一)设计原则
设计模式简述 6大基本设计原则单一职责原则依赖倒置原则依赖传递方式 里氏替换原则接口隔离原则迪米特法则开闭原则 6大基本设计原则 单一职责原则 一个接口、一个类、一个方法的功能尽量保证原子性。 至于这个度自己把握,没有绝对的标准。 通常可以将同一类、同…...
哈希表(Hashtable)核心知识点详解
1. 基本概念 定义:通过键(Key)直接访问值(Value)的数据结构,基于哈希函数将键映射到存储位置。 核心操作: put(key, value):插入键值对 get(key):获取键对应的值 remo…...
论文阅读笔记:Denoising Diffusion Implicit Models (5)
0、快速访问 论文阅读笔记:Denoising Diffusion Implicit Models (1) 论文阅读笔记:Denoising Diffusion Implicit Models (2) 论文阅读笔记:Denoising Diffusion Implicit Models (…...
JDK8卸载与安装教程(超详细)
JDK8卸载与安装教程(超详细) 最近学习一个项目,需要使用更高级的JDK,这里记录一下卸载旧版本与安装新版本JDK的过程。 JDK8卸载 以windows10操作系统为例,使用快捷键winR输入cmd,打开控制台窗口…...
R语言网状Meta分析---Meta回归(1)(基于gemtc)
示例: library(gemtc) help(package"gemtc") # Fixed effect meta-regression for heart failure prevention str(hfPrevention) regressor <- list(coefficientshared,variablesecondary,controlcontrol) model <- mtc.model(hfPrevention,type&q…...
通过AOP切面,切点,反射填充公共字段
在项目中,我们通常会实现员工管理和菜品管理等基础服务功能。这些服务在操作数据库时,往往需要记录一些通用字段,比如: 创建人ID(create_user_id) 修改人ID(update_user_id) 创…...