[leetcode400]第N位数字

发布于 2021-11-30  864 次阅读


https://leetcode-cn.com/problems/nth-digit/

中等题 不是很难 但是需要一定的思考

长度为1的数 是1-9 一共9个数 总长度位9*1=9
长度为2的数 是11-99 一共90个数 总长度为90*2=180
长度为3的数 是100-999 一共900个数 总长度为900*3=2700

以此类推 给定n 开始以此减去1 2 3对应数字的总长度 最后得到的数字就是从长度为x的第一个数开始 往后数(n-1)/x个 具体的数就是%

#include <bits/stdc++.h>
typedef long long int ll;
using namespace std;


class Solution
{
public:
  int findNthDigit(int n)
  {
    int base=1;
    int t=1;
    while(n){
      if(n-9*base*t<=0){
        break;
      }
      n-=9*base*t;
      base*=10;
      t++;
    }
    int a=(n-1)/t;
    int b=(n-1)%t;
    int ans=base+a;
    string s=to_string(ans);
    return s[b]-'0';
  }
};



愿风指引你的道路,愿你的刀刃永远锋利。