三步走的数位查找题——400. 第 N 位数字
Posted C_YCBX Py_YYDS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三步走的数位查找题——400. 第 N 位数字相关的知识,希望对你有一定的参考价值。
题目
题目详解
跟着这三步走准没错!
- which number range(确定在几位数中取)
- which number (确定是哪个数)
- which bit (确定是这个数的哪一位)
代码详解
看代码+注释应该就懂了
/*
三步走:
1.which number range
2.which number
3.which bit
*/
typedef long long ll;
int findNthDigit(int n)
ll i=1;
ll sum = pow(10,i)-pow(10,i-1);
while(n-sum*i>=0)//确定出n在几位数的范围内
n -= sum*i;
i++;
sum = pow(10,i)-pow(10,i-1);
ll num = n%i==0?n/i:n/i+1; //确定n在这个i位数中的第几个数
ll d = n%i; //确定对应的数的最终第几位
sum = pow(10,i-1); //用于得到i位数的第一个数
ll number = num + sum -1; //根据首位数和偏移量num得到具体的number
char s[20];
sprintf(s,"%ld",number); //number转字符串方便取位
int bit;
if(d>0) //如果mod出的位数d不为0,则是取第d位,如果为0则取最后一位
bit = s[d-1]-'0';
else bit = number%10;
return bit;
以上是关于三步走的数位查找题——400. 第 N 位数字的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 438. 找到字符串中所有字母异位词 / 786. 第 K 个最小的素数分数 / 400. 第 N 位数字(优先队列,二分+双指针)