问题:在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 个数字。
输入:n
输出:数字
思路:
判断是几位数
确定对应着的数值target
确定返回值是target中的哪个位
代码:
class Solution {
public:
int countOfIntegers(int digits)
{
if(digits==1)
return 9;
int count=(int)pow(10,digits-1);
return 9*count;
}
int beginNumber(int digits)
{
// if(digits==1)
// return 0;
return (int)pow(10,digits-1);
}
int digitAtIndex(int n,int digits)
{
int number=beginNumber(digits)+n/digits;
int indexFromRight=digits-n%digits;
if(n%digits==0)
return (number-1)%10;
for(int i=0;i<indexFromRight;++i)
number /=10;
return number%10;
}
int findNthDigit(int n) {
int digits=1;
while(true)
{
long numbers=countOfIntegers(digits);
if(n<numbers*digits)
return digitAtIndex(n,digits);
n-=digits*numbers;
digits++;
}
return -1;
}
};
复杂度分析:时间复杂度为O(logn),空间复杂度为O(1).