题目链接:https://leetcode.com/problems/nth-digit/#/description
题意:找1234567891011...这样的字符串中第n位是数字几。
规律就是k位数有9*10^k个数字,找到第n位数所在的数字区段,记作k位数的段,然后在这个段里找到对应的那个k位数,然后数出来对应的位就行了。
1 class Solution { 2 public: 3 int findNthDigit(int n) { 4 if(n == 0) return 0; 5 long long len = 1, cnt = 9, s = 1; 6 while(n > len * cnt) { 7 n -= len * cnt; 8 len++; 9 cnt *= 10; 10 s *= 10; 11 } 12 s += (n - 1) / len; 13 char buf[32]; 14 sprintf(buf, "%d", s); 15 return buf[(n-1)%len] - '0'; 16 } 17 };