从零学算法400

news2024/10/7 6:37:48

400.给你一个整数 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 的一部分。

  • 最开始 n 对应的就是 n,但是当数字成为两位数之后就开始对不上了,所以能想到这题的关键在于随着数字位数的变化,如何找到 n 对应的结果,为了方便称呼先定义几个概念:
  • 位数(digit):这个数字有几位,比如两位数,三位数
  • 数位:比如数字 10,11,12 组成的序列 101112,其中每一位都是一个数位,其实也就是题目所说的序列上的某一位
  • 数字(num),比如 10,11,12 ,这三个数都是数字
  • 起始数字(start):某位数最小的数字,比如两位数的范围是 10~99,start 就是 10
  • 数位数量(count):只算 n 位数包含的数位数量,比如两位数为 10~99 ,有 90 个 两位数(每个数的数位数量为 2),所以位数数量为 90 * 2 = 180
  • 现在我们知道关键在于位数变化,所以研究位数变化带来的一些规律
    请添加图片描述
  • 位数递推公式:观察从一位数,两位数,三位数的变化,所以 digit(i+1) = digit(i) + 1
  • 起始数字递推公式:最小一位数为 1,最小两位数为 10…所以 start(i+1) = start(i) * 10
  • 数位数量计算公式:n 位数范围内的数位数量总和,比如一位数包含了 9 个 一位数,所以为 9*1;两位数包含了 90 个 两位数,所以为 90*2;三位数包含 900 个三位数所以为 900*3,所以规律其实就是 count = 9 * start * digit
  • 接下来我们第一步先确定 n 对应的数是几位数,其实 n 对应的是数位数量,所以我们就让 n 不断减去 count,直到 n <= count,就能得到 n 对应几位数。
  • 第二步我们确定一下他对应具体数字 num 为什么,将第一步计算完剩下的 n 整除 digit ,再加上起始值 start 就知道它对应哪个数,但是其实我们的推导过程都没去管 0 这个数,它也算一个数位,所以实际上 num 应该是 start + (n-1)/digit;
  • 确定完了 num,同理还是用 n-1,让它对 digit 取余我们就知道他在这个数的第几位,所以把 num 转为 string,num.charAt((n-1)%digit) 就是最终对应的字符,转为数字即为最终结果
  •   public int findNthDigit(int n) {
          long start = 1;
          int digit = 1;
          long count = 9;
          // 第一步
          while(n > count){
              n -= count;
              start*=10;
              digit++;
              count = start * digit * 9;
          }
          // 第二步
          long num = start + (n-1)/digit;
          // 第三步
          return Long.toString(num).charAt((n-1)%digit) - '0';
      }
    
  • 这是从 0 开始处理版本,不忽略 0,start 在观察一位数时为 0~9 的 0,之后才符合我们的递推公式,那么 count 也是在为一位数时为 10,之后符合递推公式,这样之后就不用 n-1,直接用 n 即可
  •   public int findNthDigit(int n) {
          long start = 0;
          int digit = 1;
          long count = 10;
          while(n > count){
              n -= count;
              if(start==0)start=10;
              else start*=10;
              digit++;
              count = start * digit * 9;
          }
          long num = start + n/digit;
          return Long.toString(num).charAt(n%digit) - '0';
      }
    

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

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

相关文章

Windows Python3安装salt模块失败处理

复现CVE-2020-11651时候运行CVE-2020-11651的poc时候需要salt模块 在下载时出现了错误 尝试在网上寻找解决方法&#xff1a; 1.更新 setuptools 和 wheel pip install --upgrade setuptools wheel 2. 安装Microsoft Visual C 14.0 因为salt模块包包使用了 C/C 扩展&#x…

Flutter开发警告Constructors in ‘@immutable‘ classes should be declared as ‘const‘

文章目录 警告信息报错代码警告原因修改后的代码 警告信息 Flutter开发遇到如下警告 Constructors in ‘immutable’ classes should be declared as ‘const’. 报错代码 class TaskWidget extends StatefulWidget {final String title;final bool isChecked;final int ord…

AD9528学习笔记

前言 AD9528是ADI的一款时钟芯片&#xff0c;由2-stage PLL组成&#xff0c;并且集成JESD204B/JESD204C SYSREF信号发生器&#xff0c;SYSREF发生器输出单次、N次或连续信号&#xff0c;并与PLL1和PLL2输出同步&#xff0c;从而可以实现多器件之间的同步。 AD9528总共有14路输…

电源模块重轻载变化测试的测试目的、测试标准、测试方法介绍

电源自动测试系统针对电源模块的各项测试项目提供最合适的测试方案&#xff0c;解决测试需求&#xff0c;提高测试效能。重轻载变化测试是电源模块测试的项目之一&#xff0c;是为了检测负载变化时输出电压的变化情况。为此&#xff0c;纳米软件将介绍电源重轻载变化测试的方法…

盘点43个Python登录第三方源码Python爱好者不容错过

盘点43个Python登录第三方源码Python爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 项目名称 bnuz中国电信校园网模拟登录&#xff0c;python selenium BNUZ教务系统认证爬虫Python语言实现&#xff0c;你可以用…

为什么在Pycharm中使用Pandas画图,却不显示?

问题描述&#xff1a; 在 Pycharm 中使用 Pandas 的 plot() 方法画图&#xff0c;却不显示图像&#xff0c;源代码如下&#xff1a; import pandas as pd import numpy as np# 从文件中读取数据 starbucks pd.read_csv(./file_csv/directory.csv)# 按照国家分组&#xff0c;…

【T3】畅捷通T3登录时操作日期的日历中日期与星期对应关系错误。

【问题描述】 畅捷通T3软件登录的时候&#xff0c; 在选择操作日期位置&#xff0c;点击出日历后发现&#xff1a; 几月几日和星期几是对不上的。但是查看电脑系统右下角日期&#xff0c;是正确的。 例如&#xff1a;2023年11月24日应该是星期五&#xff0c;这里反而是星期三。…

如何去掉图片水印不伤原图?无痕去水印教程分享!

如何去掉图片水印不伤原图&#xff1f;在电商广告设计和营销领域&#xff0c;水印已经成为一种常见的版权保护手段。不过&#xff0c;水印也给淘宝商家带来了一些困扰。那么如何去掉图片水印还能不伤原图呢&#xff0c;接下来&#xff0c;将分享简单好用的无痕去水印教程&#…

高级IO—select

高级IO—select 文章目录 高级IO—selectIO的概念 五种IO模型阻塞IO非阻塞IO信号驱动IOIO多路转接异步IO I/O多路转接之select IO的概念 通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出。输入是系统接收的信号或数据&#xff0c;输出则是从其发送的信号或…

python中range函数的用法

range() 是Python的一个内置函数。语法格式为&#xff1a;range(start, stop, step) start是初始值&#xff0c;stop是最终值&#xff0c;step是步长。range()函数仅适用于整数&#xff0c;所有参数都必须是整数。步长值可以为正数或负数&#xff0c;不得为零。使用range函数时…

Mintegral业务再创新高,汇量科技基建成果已然显现?

游戏出海经过几年的跨越式发展&#xff0c;红海特征日益明显。 《2023中国游戏App出海驱动力报告》显示&#xff0c;2022年1月至2023年6月&#xff0c;我国约17000款游戏类App出海&#xff0c;安装总量超过240亿次。与此同时&#xff0c;Android和iOS侧的安装量在2022年三季度…

ONNX实践系列-修改yolov5-seg的proto分支输出shape

一、目标 本文主要介绍要将原始yolov5分割的输出掩膜从[b,c,h,.w]修改为[b, h, w, c] 原来的: 目标的: 代码如下: Descripttion: version: @Company: WT-XM Author: yang jinyi Date: 2023-09-08 11:26:28 LastEditors: yang jinyi LastEditTime: 2023-09-08 11:48:01 …

【深度学习】因果推断与机器学习

2023年初是人工智能爆发的里程碑式的重要阶段&#xff0c;以OpenAI研发的GPT为代表的大模型大行其道&#xff0c;NLP领域的ChatGPT模型火爆一时&#xff0c;引发了全民热议。而最新更新的GPT-4更是实现了大型多模态模型的飞跃式提升&#xff0c;它能够同时接受图像和文本的输入…

2023 Unite 大会关于“Muse“ AI 大模型训练

Unity Muse 借助强大的 AI 能力帮助你探索、构思和迭代&#xff0c;其中包括纹理和精灵两项功能&#xff0c;可将自然语言和视觉输入转化为可用资产。 将 AI 引入 Unity Editor 中的 Muse 提供了更快将想法转化为实物的选项。您可以调整并使用文本提示、图案、颜色和草图&…

全面预算管理,帮助企业财务团队冲破市场挑战

在实现企业财务发展的必经之路上&#xff0c;大多数财务专业人士会通过实施全面预算管理策略&#xff0c;为部门乃至整个组织建立一个用于数据管理和预测分析的财务模型&#xff0c;旨在影响和监控业务决策和变化趋势。全面预算管理通常包括历史数据分析和关于未来走向更详细的…

加入华为云鲲鹏极简开发创造营,激活创造力,探索无限可能!

数字经济时代&#xff0c;速度、效率、质量安全已成为各行业告诉拓新发展的关键&#xff0c;华为云不断打磨敏捷安全开发的软件平台&#xff0c;为更高效率的生产力变革积蓄能量。 在刚刚过去不久的2023华为全联接大会上&#xff0c;华为最新发布了华为云CodeArts与鲲鹏DevKit…

鸿蒙开发之android开发人员指南《基础知识》

基于华为鸿蒙未来可能不再兼容android应用&#xff0c;推出鸿蒙开发系列文档&#xff0c;帮助android开发人员快速上手鸿蒙应用开发。 1. 鸿蒙使用什么基础语言开发&#xff1f; ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风…

别再为仓库库存损耗头疼了!掌握6S必备装备管理轻松降低损失!

仓库库存损耗是很多装配制造企业头疼的问题&#xff0c;不仅会导致企业资产流失&#xff0c;还可能会对企业的生产和运营产生严重影响&#xff0c;因此&#xff0c;企业应认真分析导致损耗的原因&#xff0c;并有针对性地采取策略&#xff0c;降低库存损耗&#xff0c;提高企业…

JS 中的随机数方法 Math.random()

有时候项目中遇到一个功能需要随机返回多条不重复的数据&#xff0c;也可以是拿了就用&#xff0c;下次再需要时已经忘记如何使用了。 js中的生成随机数操作是基于 Math 方法下的 random() 方法 Math.random() &#xff1a; 随机获取范围内的一个数 &#xff08; 精确到小数点…

Mac系统-tomcat部署war包指定jdk版本步骤

背景: 因本机jdk安装了好几个版本, 有 1.8、 11 、17 , 现在想要启动tomcat的时候指定11版本 步骤如下: 1、 在官网下载了“apache-tomcat-9.0.83.tar.gz” 这个包. 官网地址: Apache Tomcat - Apache Tomcat 9 Software Downloads 2、解压缩, 得到tomcat目录: /Users/..…