题目
在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …中找到第 n 位数字。
注意:n 是正数且在 32 位整数范围内(n < 231)。
示例
输入:3
输出:3
输入:11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, … 里是 0 ,它是 10 的一部分。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/nth-digit
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法1:
Python实现
class Solution:
def findNthDigit(self, n: int) -> int:
base=9
wei=1
if n<10: return(n)
while(n-base*wei>0):
n -= base * wei
wei+=1
base*=10
number=10**(wei-1)+int(n/wei) #计算数字
idx=n%wei #计算位数
if idx!=0:
return(int(str(number)[idx-1:idx]))
else: #如果indx=0,则是找前一个数的最后一位
number-=1
return(int(str(number)[len(str(number))-1]))
Java实现
class Solution {
public int findNthDigit(int n) {
long base = 9, wei = 1;
if (n < 10) return n;
while (n - base * wei > 0) {
n -= base * wei;
base *= 10;
wei++;
}
long number = (int)Math.pow(10, wei - 1) + (int)(n / wei);
long idx = n % wei;
if (idx == 0) {
number -= 1;
return (int)number % 10;
} else {
number = number / (int) Math.pow(10, wei - idx);
return (int)number % 10;
}
}
}