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

news2024/12/23 8:42:54

最后一道题,我一定要自己做出来,想了不到一个小时想法差不多成熟了,但是有一个小细节出问题了,这个问题我在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.coloradmin.cn/o/893975.html

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

相关文章

基于.Net Core开发的医疗信息LIS系统源码

SaaS模式.Net Core版云LIS系统源码 医疗信息LIS系统是专为医院检验科设计的一套实验室信息管理系统&#xff0c;能将实验仪器与计算机组成网络&#xff0c;使病人样品登录、实验数据存取、报告审核、打印分发&#xff0c;实验数据统计分析等繁杂的操作过程实现了智能化、自动化…

Mac m1芯片基于parallesls desktop安装Ubuntu

1.Ubuntu镜像下载 访问Ubuntu官网自行选择版本进行下载&#xff0c;可进行以下操作进行版本选择 对于Mac系统&#xff0c;不论VM/PD都需要用arm架构镜像&#xff0c;所以点击arm架构的镜像进行下载 2.准备PD PD安装包&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/46…

深入了解Maven

目录 一.Maven介绍与功能 二.依赖管理 1.依赖的配置 2.依赖的传递性 3.排除依赖 4.依赖的作用范围 一.Maven介绍与功能 maven是一个项目管理和构建工具&#xff0c;是基于对象模型POM实现。 Maven的作用&#xff1a; 便捷的依赖管理&#xff1a;使用Maven可以简化依赖管…

FPGA GTP全网最细讲解,aurora 8b/10b协议,HDMI板对板视频传输,提供2组4套工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、GTP 全网最细解读GTP 基本结构GTP 发送和接收处理流程GTP 的参考时钟GTP 发送接口GTP 接收接口GTP IP核调用和使用 4、设计思路框架HDMI输入视频配置及采集视频数据组包GTP aurora 8b/10b数据对齐视频数据解包图像…

四层和七层负载均衡的区别

一、四层负载均衡 四层就是ISO参考模型中的第四层。四层负载均衡器也称为四层交换机&#xff0c;它主要时通过分析IP层和TCP/UDP层的流量实现的基于“IP端口”的负载均衡。常见的基于四层的负载均衡器有LVS、F5等。 以常见的TCP应用为例&#xff0c;负载均衡器在接收到第一个来…

《HeadFirst设计模式(第二版)》第九章代码——组合模式

上一章链接&#xff1a; 《HeadFirst设计模式(第二版)》第九章代码——迭代器模式_轩下小酌的博客-CSDN博客 前面说到&#xff0c;当一个菜单里面出现了子菜单的时候&#xff0c;前面的迭代器模式得换成组合模式。 组合模式&#xff1a; 允许将对象组合成树形结构来表现部分-整…

PyTorch训练深度卷积生成对抗网络DCGAN

文章目录 DCGAN介绍代码结果参考 DCGAN介绍 将CNN和GAN结合起来&#xff0c;把监督学习和无监督学习结合起来。具体解释可以参见 深度卷积对抗生成网络(DCGAN) DCGAN的生成器结构&#xff1a; 图片来源&#xff1a;https://arxiv.org/abs/1511.06434 代码 model.py impor…

跨境电商平台风控揭秘:如何应对刷单风险?

跨境电商平台内部对比被举报的买家信息时&#xff0c;会进行一系列分析来确认是否存在刷评行为。系统会追溯买家的购买记录和留评记录&#xff0c;根据留评率等信息来判断是否存在刷评的行为。如果系统确认买家存在刷评行为&#xff0c;那么该买家曾经留下的所有评价都有可能被…

我国出租车行业的发展伪历史(依赖倒置)

一、前言 既然是“伪历史”&#xff0c;大家就暂且不要纠结故事的真实性了&#xff0c;因为我们今天主要讲的并非是中国出租车的发展史&#xff0c;而是希望通过这个伪历史的例子来用日常生活中的例子&#xff0c;来深入理解一下什么叫依赖倒置。 还是按照惯例&#xff0c;我…

【从零开始学习Linux】常用命令及操作

哈喽&#xff0c;哈喽&#xff0c;大家好~ 我是你们的老朋友&#xff1a;保护小周ღ 本期给大家带来的是 Linux 常用命令及操作&#xff0c;主要有三个分类&#xff1a;文件操作&#xff0c;目录操作&#xff0c;网络操作&#xff0c;创建文件 touch , 创建目录 mkdir , 删除…

【了解一下常见的设计模式】

文章目录 了解一下常用的设计模式(工厂、包装、关系)导语设计模式辨析系列 工厂篇工厂什么是工厂简单工厂「模式」&#xff08;Simple Factory「Pattern」&#xff09;简单工厂代码示例&#xff1a;简单计算器优点&#xff1a;缺点&#xff1a; 静态工厂模式特点&#xff1a; 工…

基于Spring Boot的社区诊所就医管理系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频&#xff1a; 基于Spring Boot的社区诊所就医管理系统的设计与实现&#xff08;Javaspring bootMySQL&#xff09; 使用技术&#xff1a; 前端&#xff1a;html css javascript jQuery ajax thymeleaf 微信小程序 后端&#xff1a;Java …

改进YOLO系列:2.添加ShuffleAttention注意力机制

添加ShuffleAttention注意力机制 1. ShuffleAttention注意力机制论文2. ShuffleAttention注意力机制原理3. ShuffleAttention注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. ShuffleAttention注意力机制论文 论文题目:SA-NET: SHUFFLE ATTENTION …

教育行业选择CRM的四大要求

随着互联网教育的发展和变迁&#xff0c;越来越多的教育机构开始意识到管理客户关系的重要性。然而&#xff0c;对于教育行业来说&#xff0c;选择一款适合自己的CRM系统也不轻松。下面就来说说&#xff0c;教育行业crm要如何来选择&#xff1f; 一、明确使用需求 在进行CRM选…

如何使用 ChatGPT 将文本转换为 PowerPoint 演示文稿

推荐&#xff1a;使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 步骤 1&#xff1a;将文本转换为幻灯片演示文稿 第一步涉及指示 ChatGPT 根据给定的文本生成具有特定数量幻灯片的演示文稿。首先&#xff0c;您必须向 ChatGPT 提供要转换的文本。 使用以下提示指示…

Gitlab服务部署及应用

目录 Gitlab简介 Gitlab工作原理 Gitlab服务构成 Gitlab环境部署 安装依赖包 启动postfix&#xff0c;并设置开机自启 设置防火墙 下载安装gitlab rpm包 修改配置文件/etc/gitlab/gitlab.rb&#xff0c;生产环境下可以根据需求修改 重新加载配置文件 浏览器登录Gitlab输…

Azure CLI 进行磁盘加密

什么是磁盘加密 磁盘加密是指在Azure中对虚拟机的磁盘进行加密保护的一种机制。它使用Azure Key Vault来保护磁盘上的数据&#xff0c;以防止未经授权的访问和数据泄露。使用磁盘加密&#xff0c;可以保护磁盘上的数据以满足安全和合规性要求。 参考文档&#xff1a;https://l…

职场修炼:性格内向的程序员如何突破自己

性格内向&#xff0c;不是缺点 社会常识中的看法&#xff1a;性格内心&#xff0c;是成功的障碍。 实际情况&#xff1a;内向和外向各有优缺点 忌讳&#xff1a; 强行改变自己的性格。内心不接受自己的性格。 内向者的优点 善于研究&#xff0c;能够较长时间研究技术问题…

仿写一个tomcat(含线程池配置)超详细!!

目录 工作原理 整体项目结构 自定义注解 创建servlet类 创建启动类 线程池配置 测试阶段 工作原理 首先看流程图&#xff0c;搞清楚tomcat的工作原理 工作原理如下&#xff1a; Tomcat使用一个叫作Catalina的核心组件来处理HTTP请求和响应。Catalina包含了一个HTTP连接…

匈牙利算法相关介绍

重要说明&#xff1a;本文从网上资料整理而来&#xff0c;仅记录博主学习相关知识点的过程&#xff0c;侵删。 一、参考资料 匈牙利算法匹配问题? Exactly how the Hungarian Algorithm works 多目标跟踪数据关联之匈牙利算法 五分钟小知识&#xff1a;什么是匈牙利算法 论文…