在无限的整数序列 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的一部分。
解法:
func findNthDigit(_ n: Int) -> Int {
var n = n
var carry = 1
var bits = 1
while n > carry * bits * 9 {
n -= carry * 9 * bits
carry += 1
bits *= 10
}
let num = (n - 1)/carry + bits
let mol = ((carry - n % carry) % carry) + 1
var dev = 1
for _ in 0..<mol-1 {
dev *= 10
}
return ((num % (dev * 10)) / dev)
}