难度中等181
在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n
位数字。
注意:n
是正数且在 32 位整数范围内(n < 231
)。
示例 1:
输入:3 输出:3
示例 2:
输入:11 输出:0 解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。
题目描述如上。
执行结果:
通过
显示详情
添加备注
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:6.2 MB, 在所有 C++ 提交中击败了5.42%的用户
通过测试用例:71 / 71
做题思路要清晰,不要被情绪打扰了。
class Solution {
public:
int getnum(int num,int pos)//输出数字num的第pos位
{
string str = to_string(num);
if(pos > str.size())
return 0;
return str[pos - 1] - '0';
}
int findNthDigit(int n) {
vector<long> v;
v.push_back(0);
v.push_back(9);
for(int i = 1;i<=10;++i)
v.push_back(v.back() + 9*pow(10,i)*(i+1));
auto iter = v.begin();
for(;iter != v.end();++iter)
{
if(*iter >= n)
break;
}
if(*iter == n) return 9;if(*iter+1 == n) return 0;
int pos = iter - v.begin();//目标是几位数
int num = (n - *(iter-1));
int bit = num % pos;//第几位
num /= pos;
num += pow(10,pos - 1);//当前到了 哪个数字
if(bit == 0)
{
bit = pos;
num--;
}
cout<<num<<" "<<bit<<endl;
return getnum(num,bit);
}
};