三步走的数位查找题——400. 第 N 位数字

Posted C_YCBX Py_YYDS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三步走的数位查找题——400. 第 N 位数字相关的知识,希望对你有一定的参考价值。

题目


OJ平台

题目详解

跟着这三步走准没错!

  1. which number range(确定在几位数中取)
  2. which number (确定是哪个数)
  3. 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(算法)- 400. 第 N 位数字

LeetCode(算法)- 400. 第 N 位数字

LeetCode(算法)- 400. 第 N 位数字

LeetCode 438. 找到字符串中所有字母异位词 / 786. 第 K 个最小的素数分数 / 400. 第 N 位数字(优先队列,二分+双指针)

LeetCode 400. 第 N 位数字(找规律,Java)

LeetCode 400. 第 N 位数字(找规律,Java)