Java实现 LeetCode 400 第N个数字
2024-10-09 03:55:42
400. 第N个数字
在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 个数字。
注意:
n 是正数且在32为整形范围内 ( n < 231)。
示例 1:
输入:
3
输出:
3
示例 2:
输入:
11
输出:
0
说明:
第11个数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是0,它是10的一部分。
PS:
思路是:位数 数字个数(即个位数字一共9个 两位数一共90个)
1 9
2 90
3 900
… …
给定一个n,先找所在的区间(如1-9,10-99…),然后求出它是所在的区间的第多少个数字,再算出是这个数字的第几位。找区间按照公式n=n-9*1-90*2-900*3...-9*10^(i-1)*i,
求出的i指它在i位数的区间内,n为该区间第n个数字,假设公式得到的n=4,i=2,那么说明是两位数,4/i=2,说明是第2个数字,即11,4%i=0,说明是第二个数字的最后一位,即1。
再假设共识得到n=25,i=3,说明是三位数,25/3=8,25%3=1,说明三位数中第8+1个数字,是这个数字的第1位,即是108中的1
class Solution {
public int findNthDigit(int n) {
if(n<10) return n;
int i;//记录结果所在数字的区间是几位数
for(i=1;n>9*i*Math.pow(10,i-1);++i){
n-=9*i*Math.pow(10,i-1);
}
int index=n/i;//某个区间第index个数字
if(index==0) index=1;//不会出现第0个数字,起码从第一个数字起
int bit=n%i;//第index个数的第bit位,接下来找出这个位数
int number=(int)Math.pow(10,i-1)+index-1; //number为一个具体的i位数
if(bit==0)//说明在这个数字的最后一位
return number%10;
else return getIndexBit(number+1,bit,i);//bit不为0 时,数字要再加1
}
private int getIndexBit(int number,int bit,int i){ //获取数字number的第bit位数
int a=(int)(number/Math.pow(10,i-bit));
return a%10;
}
}
最新文章
- MySQL高可用架构之MHA
- Tableau修改参考线上显示的标签
- 慕课网-Java入门第一季-7-1 如何定义 Java 中的方法
- sqlite的增删改查
- echosp 销量排行 新增实际价格
- Linux考试易忘命令
- 贪心 POJ 1328 Radar Installation
- Spark菜鸟学习营Day4 单元测试程序的编写
- cxf简单实例
- PCB优化设计(二) 转载
- js兼容性大全(持续更新)
- Flask web开发 简单介绍
- Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据
- ubuntu 18.04安装docker以及docker内配置neo4j
- 如何创建应用程序包(C ++)
- HTML表单简单练习
- html5-article元素
- hdu 1000 真水题
- tomcat修改java不重启
- MSP430 G2553 Launchpad实现电容测量