前记
不得不说自己还欠缺很多, 这道easy的leetcode原题就在今年阿里笔试编程题(第二题)出现了, 当时没有AC, 做题不够实在伤感...
Description
Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...
Note:
n is positive and will fit within the range of a 32-bit signed integer (n < 231).
Example 1:
Input:
3
Output:
3
Example 2:
Input:
11
Output:
0
Explanation:
The 11th digit of the sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... is a 0, which is part of the number 10.
My solution
下面代码自己AC代码, 查看discuss发现大家思路都是这样做.
class Solution {
public:
int findNthDigit(int n) {
long long sum = 0;
long long tens = 1;
int i;
for (i = 1; sum < n; ++i, tens *= 10) {
sum += i * tens * 9;
}
tens /= 10;
--i;
sum -= tens * 9 * i;
int dif = n - sum;
int whichNum = dif / i + tens;
int yu = dif % i;
if (yu == 0) return (whichNum - 1) % 10;
while (--yu) tens /= 10;
whichNum /= tens;
return whichNum % 10;
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。