剑指offer44.数字序列中某一位的数字

最后一道题,我一定要自己做出来,想了不到一个小时想法差不多成熟了,但是有一个小细节出问题了,这个问题我在idea上debug都没debug出来。我先讲我的题解然后再讲我这个小问题出在哪里吧。以下是我的代码:

class Solution {public int findNthDigit(int n) {if(n<10)return n;int[][] area = new int[10][2];int start =0;int end = 9;for(int i =2;i<=9;i++){start=end+1;area[i][0]=start;end=(int)(end+9*Math.pow(10,i-1)*i);area[i][1]=end;}for(int i=1;i<=9;i++){if(n>=area[i][0] && n<=area[i][1]){int moreArea = n-area[i][0]+1;int moreDig = moreArea / i;int num =(int)(moreDig + Math.pow(10, i-1)-1);int more = moreArea % i;if(more == 0){return num % 10;}else{String numString = String.valueOf(num+1);char numChar = numString.charAt(more-1);return numChar - '0';}}}return -1;}
}

我创建一个area[10][2]的数组,area[i][0]表示i位数在序列中的起始序号,area[i][1]表示i位数在序列中的终止序号,比如area[2][0]=10,area[2][1]=190,表示两位数在序列中的起始序号是10,终止序号是190,这里我是从两位数开始的,因为一位数的话直接返回自己就好了,而这个起始和终止序号怎么算呢?

我们知道1位数有10个,分别是0-9;2位数有90个,分别是10-99;3位数有900个,分别是100-999;四位数有9000个,分别是1000-9999;…………我们可以发现i位数的个数就是9乘以10的i-1次方,这样我们算序号就简单多了,比如两位数的起始序号就是1位数的终止序号加1,两位数的终止序号就是1位数的终止序号9加上90*2;我们可以发现i位数的起始序号就是i-1位数的终止序号加1,i位数的终止序号就是i-1位数的终止序号+(i位数的个数*i),这样一来就可以算出area数组,我这里最多只能算9位数的终止序号,因为n最大2的31次方,9位数的终止序号绝对够了。

然后我们就拿n去循环中和area[i][0]和area[i][1],如果n在这中间,说明n是i位数。int moreArea = n-area[i][0]+1;这个moreArea可以算出n在i位数中的第几位,int moreDig = moreArea / i;这个moreDig表示n是i位数中的第几个数字(如果刚好除净n就在第moreDig个i位数的末尾,如果有余数n出处在第moreDig+1个i位数中),int num =(int)(moreDig + Math.pow(10, i-1)-1),num就是n所在的数字(除净的情况下是,否则是num+1)。int more = moreArea % i;看看是不是除净了,有没有余数,如果除净了直接返回num%10也就是个位,如果没除净那么n就是num+1中的余数-1位,先把num+1变成string,然后取num+1的第余数-1个char,这个char-‘0’就可以获得数字了。

我出问题的那个细节就是算end的时候我是用start+i位数的个数*i,这样就导致所有的end全算错了,除了2位数以外的start也全算错了,因为两位数的start是9+1得来的所以没算错,其他start是由上一个end得来的全错了,因为算n是第几位的时候减了start所以就错了,但是两个样例分别是3和11,3是1位数我直接返回了,11是2位数我的2位数start没错,所以两个样例都过了,示例没过。

好了,剑指offer全刷完了,接下来刷Hot100题。慢慢积累,慢慢成长吧,加油!

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

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

相关文章

PHP手术麻醉系统源码,自动生成麻醉和护理医疗文书

一套手术麻醉系统源码&#xff0c;可二次开发 手术室麻醉临床信息系统&#xff08;AIMS&#xff09;是应用于医院手术室、麻醉科室的计算机软件系统。该系统针对整个围术期&#xff0c;对病人进行全程跟踪与信息管理&#xff0c;自动集成病人HIS、LIS、RIS、PACS信息&#xff0…

【Spring源码】小白速通解析Spring源码,从0到1,持续更新!

Spring源码 参考资料 https://www.bilibili.com/video/BV1Tz4y1a7FM https://www.bilibili.com/video/BV1iz4y1b75q bean工厂 DefaultListableBeanFactory&#xff08;最原始&#xff09; bean的生命周期 创建&#xff08;实例化&#xff09;–>依赖注入–>-初始化…

数据生成 | MATLAB实现WGAN生成对抗网络数据生成

数据生成 | MATLAB实现WGAN生成对抗网络数据生成 目录 数据生成 | MATLAB实现WGAN生成对抗网络数据生成生成效果基本描述程序设计参考资料 生成效果 基本描述 1.WGAN生成对抗网络&#xff0c;数据生成&#xff0c;样本生成程序&#xff0c;MATLAB程序&#xff1b; 2.适用于MATL…

【游戏评测】河洛群侠传一周目玩后感

总游戏时长接近100小时&#xff0c;刚好一个月。 这两天费了点劲做了些成就&#xff0c;刷了等级&#xff0c;把最终决战做了。 总体感觉还是不错的。游戏是开放世界3D游戏&#xff0c;Unity引擎&#xff0c;瑕疵很多&#xff0c;但胜在剧情扎实&#xff0c;天赋系统、秘籍功法…

JDBC Vertica Source Connector 使用文档

支持以下引擎 Spark Flink SeaTunnel Zeta 关键特性 批处理 精确一次性处理 列投影 并行处理 支持用户自定义拆分 支持查询 SQL 并实现投影效果 描述 通过 JDBC 读取外部数据源数据。 支持的数据源信息 DatasourceSupported versionsDriverUrlMavenVerticaDifferent depen…

设计HTML5表格

在网页设计中&#xff0c;表格主要用于显示包含行、列结构的二维数据&#xff0c;如财务表格、调查数据、日历表、时刻表、节目表等。在大多数情况下&#xff0c;这类信息都由列标题或行标题及数据构成。本章将详细介绍表格在网页设计中的应用&#xff0c;包括设计符合标准化的…

【第七讲---视觉里程计1】

视觉里程计就是通过对图像进行特征提取与匹配得到两帧之间的位姿&#xff0c;并进行估计相机运动。 经典SLAM中以相机位姿-路标来描述SLAM过程 特征提取与匹配 路标是三维空间中固定不变的点&#xff0c;可以在特定位姿下观测到在视觉SLAM中&#xff0c;可利用图像特征点作为…

2023 CCF BDCI 数字安全公开赛正式开启报名

2023 CCF BDCI 数字安全公开赛重磅来袭&#xff01; 全新的赛道场景 丰厚的赛事奖励 精彩的周边活动 数字安全守护人的狂欢盛宴 快来报名参加吧 大赛背景 伴随着数智化的持续加深&#xff0c;网络安全、数据安全风险遍布于所有场景之中&#xff0c;包括工业生产、能源、交…

2019年9月全国计算机等级考试真题(C语言二级)

2019年9月全国计算机等级考试真题&#xff08;C语言二级&#xff09; 第1题 1、“商品”与“顾客”两个实体集之间的联系一般是 A. 一对一 B. 一对多 C. 多对一 D. 多对多 正确答案&#xff1a;D 第2题 定义学生选修课程的关系模式&#xff1a;SC&#xff08;S#&#xff0c…

运营商三要素 API:构建安全高效的身份验证系统

当今数字化的世界中&#xff0c;身份验证是各行各业中至关重要的一环。为了保护用户的隐私和数据安全&#xff0c;企业需要寻求一种既安全可靠又高效便捷的身份验证方式。运营商三要素 API 应运而生&#xff0c;为构建安全高效的身份验证系统提供了有力的解决方案。 运营商三要…

R语言 列表中嵌套列名一致的多个数据框如何整合为一个数据框

在批量建模后容易得到list&#xff0c;list中的每个元素都是单个的tibble 或者 dataframe&#xff0c;如何将这些数据整合为一张表呢&#xff1f; 载入R包 library(broom) library(tidyverse) 模拟数据 models <- txhousing %>% group_by(city) %>% do(modlm(lo…

-Webkit-Box 在 Safari 中出现的兼容性问题

一、问题背景&#xff1a; UI要求要实现这样的效果&#xff0c;使用 display:-webket-box在chrome浏览器下完美解决 但是马上啪啪打脸&#xff0c;在safari浏览器下显示空白 &#xff0c;不能不说浏览器之间的兼容性简直就是天坑 二、解决办法 通过浏览器调试发现原本float的…

使用Pillow对图像进行变换

使用Pillow对图像进行变换 from PIL import Image, ImageEnhance# 原图 image Image.open("1.jpg") image.show()# 镜像 mirrored_image image.transpose(Image.FLIP_LEFT_RIGHT) mirrored_image.show() mirrored_image.save(mirror_image.jpg)# 旋转 rotated_imag…

VK36W1D浴缸,洁具高灵敏度电容式单点液体水位检测触摸芯片资料介绍

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK36W1D 封装形式&#xff1a;SOT23-6L 产品年份&#xff1a;新年份 &#xff08;C21-163&#xff09; 产品特点&#xff1a;VK36W1D具有1个触摸检测通道&#xff0c;可用来检测水从无到有和水从有到无的动作。该…

一个模型解决所有类别的异常检测

文章目录 一、内容说明二、相关链接三、概述四、摘要1、现有方法存在的问题2、方案3、效果 五、作者的实验六、如何训练自己的数据1、数据准备2、修改配置文件3、代码优化修改4、模型训练与测试 七、结束 一、内容说明 在我接触的缺陷检测项目中&#xff0c;检测缺陷有两种方法…

网络通信基础

1.网络结构模式&#xff08;C/S和B/S&#xff09; (1)C/S结构模式 服务器 - 客户机&#xff0c;即 Client - Server&#xff08;C/S&#xff09;结构。 优点&#xff1a; 能充分发挥客户端 PC 的处理能力&#xff0c;很多工作可以在客户端处理后再提交给服务器&#xff…

大数据-玩转数据-Flink RedisSink

一、添加Redis Connector依赖 具体版本根据实际情况确定 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-redis_2.11</artifactId><version>1.1.5</version> </dependency>二、启动redis 参…

分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测

分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测 目录 分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分…

回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测

回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测 目录 回归预测 | MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于SAE堆叠自编辑器多输入单输出回归预测&#xff1b; 2.运行环…

Request+Response

文章目录 1. 介绍2. Request对象2.1 Request继承体系2.2 Request获取请求数据1.获取请求行2.获取请求头3.获取请求体4. 请求参数的通用方式5. 解决中文乱码问题 2.3 Request请求转发请求转发资源间共享数据: 3. Response对象3.0 Response 继承体系3.1 Response设置响应数据的功…