57. 数字序列中某一位的数字
数字以0123456789101112131415…的格式序列化到一个字符序列中。
在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。
请写一个函数求任意位对应的数字。
思路:数字按位数分类分别有9,90,900,9000……个数
class Solution { public: int digitAtIndex(int n) { if(!n) return 0; //i表示i位数,s表示i位数的个数,base表示i位数的第一个数 long long i = 1, s = 9, base = 1; //一,判断n是几位数 while( n > i*s){ n -= i*s; s*= 10; base*=10; i++; } //二、确定第n位是哪个数字 int num = base + (n+i-1)/i - 1; //向上取整 //三、确定第n位是那个数字的第几位 int r = n%i == 0? i:n%i; //得到那位数字 for(int j = 0; j < i-r; j++) num/=10; return num%10; } };