LeetCode 400. 第 N 位数字——JAVA
题目描述:
给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。
示例 1:
输入:n = 3 输出:3
示例 2:
输入:n = 11 输出:0 解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。
提示:
1 <= n <= 231 - 1
解法:
class Solution {public int findNthDigit(int n) {if(n < 10) return n;long num = (long)n;long sum = 0;long posNum = 0;long pos = 0;for (long i = 1; i < num; i++) {sum += i * 9 * Math.pow(10, i - 1);if (sum > num) {sum -= i * 9 * Math.pow(10, i - 1);posNum = i * 9 * (long) (Math.pow(10, i - 1));pos = i;break;}}int targerNum = -1;for (long i = 0; i < posNum; i++) {if (sum >= num) {long target = (long) (Math.pow(10, pos - 1)) + (i - 1);long offset = Math.abs(sum - pos - num);targerNum = Long.toString(target).charAt((int)offset - 1) - '0';break;}sum += pos;}return targerNum;}
}
思路:
1.个位数直接返回
2.1位数的总个数为1*9,
两位数的总位数为 2 * 90 (两位数占两个位,数量为90个),
三位数总位数为3*900((三位数占三个位,数量为900个)),
四位数的总位数为3*9000((四位数占四个位,数量为9000个)),
依次类推,N位数的总位数为 N * 9 * 10 ^(N-1)
于是有了
sum += i * 9 * Math.pow(10, i - 1);
前面所有位数的总和。
于是我们需要得到一个值,那就是多少位之和大于等于(大于是因为目标值可能在某一个数的某一个位,这个位我们称之为偏移值)我们目标值
for (long i = 1; i < num; i++) {sum += i * 9 * Math.pow(10, i - 1);if (sum > num) {sum -= i * 9 * Math.pow(10, i - 1);posNum = i * 9 * (long) (Math.pow(10, i - 1));pos = i;break;}}
这一段代码就是找到大于目标值的总位数之和,其中sum是前面位数累计和,posNum是未超过目标值的计算起始值,比如目标值在7位数和8位数和的中间,于是我们先计算出前面所有7位数之和,然后新的计算值从10^8开始,而这里得到的值就是当前需要统计的位数。
int targerNum = -1;for (long i = 0; i < posNum; i++) {if (sum >= num) {long target = (long) (Math.pow(10, pos - 1)) + (i - 1);long offset = Math.abs(sum - pos - num);targerNum = Long.toString(target).charAt((int)offset - 1) - '0';break;}sum += pos;}return targerNum;
然后从10^N开始遍历,每次偏移量就是N次方,得到超过目标值的领界值,然后通过累计值减去目标值得到偏移量,
偏移的目标值是N次方的起始值+遍历次数
这个值转化成字符串,通过偏移量得到字符串中的字符,然后转化成数字即可
Long.toString(target).charAt((int)offset - 1) - '0';
这里charAt是从0开始,所以需要把我们计算出来的偏移量减去1
相关文章:
LeetCode 400. 第 N 位数字——JAVA
题目描述: 给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。 示例 1: 输入:n 3 输出:3示例 2: 输入:n 11 输出࿱…...
解决生成式AI落地之困,亚马逊云科技提供完整解决方案
生成式AI技术无疑是当前最大的时代想象力之一。 资本、创业者、普通人都在涌入生成式AI里去一探究竟:“百模大战”连夜打响,融资规模连创新高,各种消费类产品概念不断涌现……根据Bloomberg Intelligence 的报告,2022年生成式AI 市…...
【5款登录验证校验】基于jquery实现的5款登录验证码组件(附完整源码)
文章目录 写在前面涉及知识点1、随机字母验证码1.1 效果1.2 实现源码 2、数字运算验证码2.1 效果2.2 实现源码 3、滑块验证码3.1 效果3.2 实现源码 4、图片补全验证码4.1 效果4.2 实现源码 5、顺序点选验证码5.1 效果5.2 实现源码 6、源码分享6.1 百度网盘6.2 123网盘6.3 邮箱留…...
数据结构的树存储结构
数据结构的树存储结构 之前介绍的所有的数据结构都是线性存储结构。本章所介绍的树结构是一种非线性存储结构,存储的是具有“一对多”关系的数据元素的集合。 (A) (B) 图 1 树的示例 图 …...
linux--epoll
epoll 参考文献 https://www.cnblogs.com/lojunren/p/3856290.html https://www.51cto.com/article/717096.html linux下的I/O复用epoll详解 要深刻理解epoll,首先得了解epoll的三大关键要素:mmap、红黑树、链表。 IO多路复用 首先需要了解什么是IO多…...
async和await
一,基本使用 其实就是之前学过的异步函数,异步编程在函数前写一个ansyc,就转化为异步函数,返回的是一个promise对象,于是就可以使用await关键字,可以把异步函数写成同步函数的形式,极大地提高代…...
如何从cpu改为gpu,pytorch,cuda
1.cmd输入nvcc -V 2.得到 cuda版本后,去pytorch官网 3.根据自己的cuda进行选择 4.复制上述链接,进入cmd 5.cmd中输入activate XXX,这里的"XXX"指代自己在工程中用到的环境 6.进入后,将刚才链接粘贴,回车等待下载结束 …...
JavaScript简介--语句--变量
目录 JavaScript简介 为什么学习 JavaScript JavaScript与ECMAScript的关系 JavaScript版本 JavaScript语句、标识符 语句 标识符 JavaScript保留关键字 变量 变量的命名规则 数据类型 变量的重新赋值 变量提升 运算符 条件语句 循环语句 JavaScript简介 JavaScri…...
Windows CMD 关闭,启动程序
Windows CMD 关闭,启动程序 1. Windows 通过 CMD 命令行关闭程序 示例:通过 taskkill 命令关闭 QQ 管家,但是这里有个问题,使用命令行关闭 QQ 管家时,会提示“错误: 无法终止 PID 1400 (属于 PID 22116 子进程)的进程…...
统计XML标注文件中各标注类别的标签数量
目标检测任务重,担心数据集中各标签类别不均衡,想统计XML标注文件中各标注类别的标签数量,可以使用以下脚本: import os import glob import xml.etree.ElementTree as etdef count_labels(source_dir):file_list glob.glob(os.…...
一百六十、Kettle——Linux上安装的Kettle9.2.0连接Hive3.1.2
一、目标 Kettle9.2.0在Linux上安装好后,需要与Hive3.1.2数据库建立连接 之前已经在本地上用kettle9.2.0连上Hive3.1.2 二、各工具版本 (一)kettle9.2.0 kettle9.2.0安装包网盘链接 链接:https://pan.baidu.com/s/15Zq9w…...
C++新经典03--共用体、枚举类型与typedef
共用体 共用体,也叫联合,有时候需要把几种不同类型的变量存放到同一段内存单元,例如,把一个整型变量、一个字符型变量、一个字符数组放在同一个地址开始的内存单元中。这三个变量在内存中占的字节数不同,但它们都从同…...
HCIP-OpenStack组件介绍
openstack把这些组件服务都集成到httpd服务中了,目的是为了提升性能。登入不了openstack在控制节点查下httpd服务,systemctl status httpd Horizon:提供webUI图形化界面的 Keystone:提供身份认证服务、授权、endpoint端点…...
2682. 找出转圈游戏输家
题目描述: n 个朋友在玩游戏。这些朋友坐成一个圈,按 顺时针方向 从 1 到 n 编号。从第 i 个朋友的位置开始顺时针移动 1 步会到达第 (i 1) 个朋友的位置(1 < i < n),而从第 n 个朋友的位置开始顺时针移动 1 步…...
RESTAPI简介与DRF使用
RESTAPI 以资源为url,通过不同的请求方式实现不同的行为。 以资源名作为url POST:增 …/student/ GET:查所有 …/student/ GET:查单个 …/student/<pk>/ 获取idpk的学生 DELETE:删 …/student/<pk>/ PUT&#…...
深度学习笔记(kaggle课程《Intro to Deep Learning》)
一、什么是深度学习? 深度学习是一种机器学习方法,通过构建和训练深层神经网络来处理和理解数据。它模仿人脑神经系统的工作方式,通过多层次的神经网络结构来学习和提取数据的特征。深度学习在图像识别、语音识别、自然语言处理等领域取得了…...
windows下载任意版本php
zzwindows.php.net - /downloads/releases/archives/ windows下载php,记录一下...
Linux命令
操作系统管理硬件设备,并为用户和应用程序提供一个简单的接口,以便于使用。(作为中间人,连接软件和硬件)不同应用领域的主流操作系统 桌面操作系统 Windows系列::用户群体大 macOS:适合于开发人…...
TDD(测试驱动开发)?
01、前言 很早之前,曾在网络上见到过 TDD 这 3 个大写的英文字母,它是 Test Driven Development 这三个单词的缩写,也就是“测试驱动开发”的意思——听起来很不错的一种理念。 其理念主要是确保两件事: 确保所有的需求都能被照…...
C/C++
const 作用 修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer);修饰引用,指向…...
STD算法实战:用Python从零复现激光SLAM中的“稳定三角形”回环检测(附代码)
STD算法实战:用Python从零复现激光SLAM中的“稳定三角形”回环检测 激光SLAM技术正在重新定义机器人导航的精度上限,而回环检测作为其核心模块,直接决定了建图与定位的长期稳定性。传统基于点云局部特征的方案在视角变化场景中表现欠佳&#…...
国内用户怎么注册.ai域名?2026最新AI域名注册规则+平台推荐
随着人工智能(AI)行业的持续爆发,越来越多企业在搭建官网时,开始优先选择 .ai域名。 你会发现一个明显变化: 👉 很多AI工具、AI平台,直接使用“.ai”作为网站后缀 这背后的原因,其…...
别再被html2canvas生成的图片糊一脸了!试试这个新版1.4.1的清晰度优化方案
深度解析html2canvas 1.4.1:告别图片模糊的现代解决方案 当我们需要将网页内容转换为图片时,html2canvas无疑是最常用的工具之一。然而,许多开发者在使用过程中都遭遇过生成的图片模糊不清的问题,尤其是在移动设备上表现更为明显。…...
告别Provider嵌套!用Naive UI的createDiscreteApi一键管理message、dialog、loadingBar
告别Provider嵌套!用Naive UI的createDiscreteApi一键管理全局反馈组件 在构建现代Vue 3应用时,全局反馈机制如消息提示(message)、对话框(dialog)、通知(notification)和加载条(loadingBar)是不可或缺的交互元素。传统方案需要在组件树中层层嵌套Provid…...
3分钟高效掌握Python手机号查QQ号实用技巧
3分钟高效掌握Python手机号查QQ号实用技巧 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 手机号查QQ号是现代社交网络管理中的一项实用技能,通过Python工具可以快速实现手机号与QQ号的关联查询。这个开源项目提供了一个…...
告别黑盒:手把手教你用VTK在QT中‘组装’并驱动SolidWorks导出的机械臂模型
从STL零件到可交互机械臂:VTKQT三维可视化开发实战 机械臂的数字化仿真一直是工业自动化与机器人教学中的核心课题。想象一下,当你从SolidWorks中导出一堆零散的STL文件,如何在代码中让它们"活"起来——每个关节都能独立旋转&#…...
基于GAN的AI图像水印移除工具VeoWatermarkRemover实战指南
1. 项目概述:一个开源图像水印移除工具 最近在整理一些老照片和网上下载的素材时,经常被图片上那些碍眼的水印、Logo或者时间戳困扰。手动用PS处理,费时费力,而且对批量操作极不友好。直到我发现了GitHub上一个名为“VeoWatermar…...
为开源Agent框架Hermes配置Taotoken作为模型供应商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为开源Agent框架Hermes配置Taotoken作为模型供应商 本文将详细介绍如何在Hermes Agent项目中,将其模型供应商配置为Tao…...
Seraphine:你的英雄联盟智能助手,3步实现高效战绩查询与游戏辅助
Seraphine:你的英雄联盟智能助手,3步实现高效战绩查询与游戏辅助 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 还在为英雄联盟对局中信息不足而困扰吗?想要在BP阶段就占据…...
从U盘启动OpenWRT:零门槛打造你的x86软路由实验平台
1. 为什么选择U盘启动OpenWRT软路由? 去年我帮朋友改造旧笔记本时,偶然发现用U盘跑OpenWRT简直是个宝藏方案。相比直接刷入硬盘,U盘启动有三大不可替代的优势:零成本实验、无损体验和随身携带。你完全可以用吃灰的旧U盘࿰…...
