当前位置: 首页 > news >正文

剑指offer——搜索算法:数字序列中某一位的数字

思路

首先判断当前要检查的元素是否为个位数,如果当前为个位数,直接返回当前元素就行

如果不是个位数,先需要确定当前的n所在范围,然后用n减去上一段的总位数,获得当前元素在下一段中的位置,更新下一段的起始数字,下一段的位数++,更新当前位数段的总位数

先计算具体数字,需要将计算出来的数字-1,因为每一段都是从0开始计算的,通过对位数相除和起始值相加获得具体的数字,通过对位数取余算出当前要求的n在数字内是第几位,通过转成字符串并使用下标,获得最终结果

代码

#include <string>
class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param n int整型 * @return int整型*/int findNthDigit(int n) {if(n<10)return n;int digit = 1;          // 当前数字的位数(从1位数开始)long long start = 1;    // 当前位数段的起始数字(1位数从1开始)long long sum = 9;      // 当前位数段的总位数(1位数有9位:1-9)// 步骤1:确定n所在的位数段while (n > sum) {n -= sum;           // 减去当前位数段的总位数start *= 10;        // 下一个位数段的起始数字digit++;            // 增加数字位数sum = 9LL * start * digit; // 计算新位数段的总位数}// 步骤2:计算具体数字int num = start + (n - 1) / digit;  // 当前位数段中的第几个数字// 步骤3:计算数字中的位置int index = (n - 1) % digit;        // 数字中的第几位// 步骤4:转换为字符串并返回指定位return std::to_string(num)[index] - '0';}
};
http://www.dtcms.com/a/301209.html

相关文章:

  • Python操作Excel文件完整指南
  • 深度强化学习走向多智能体:从AlphaGo到智能车队
  • AtCoder Beginner Contest 416(A~D)
  • Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation
  • 由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程
  • Java异常处理
  • 使用Python,OpenCV计算跑图的图像彩色度
  • 移植pbrt中的并行化到ray trace in weeks中
  • JVM内存结构
  • 零基础学习性能测试第五章:JVM性能分析与调优-JVM运行时内存区域介绍
  • 企业级数据架构构建之道
  • Unity FXAA
  • SQL注入SQLi-LABS 靶场less21-25详细通关攻略
  • Ubuntu普通用户环境异常问题
  • Linux->自定义shell
  • Acrobat 文件夹级脚本扩展表单功能
  • 【奔跑吧!Linux 内核(第二版)】第4章:内核编译和调试
  • 物联网安装调试-物联网网关
  • Python数据分析基础(二)
  • 两个函数的卷积
  • Kafka——消费者组消费进度监控都怎么实现?
  • 数字签名与数字证书
  • [leetcode] 图论算法(DFS和BFS)
  • Java“class file contains wrong class”解决
  • NX868NX872美光固态闪存NX873NX876
  • 疯狂星期四文案网第21天运营日记
  • 10.模块与包:站在巨人的肩膀上
  • 去除视频字幕 5: 使用 ProPainter, 记录探索过程
  • red靶机
  • MCU 通用AT指令处理框架