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.
题目的意思是给定一串无穷大的正整数,让我们找出第n个数字是多少。
思路:我们可以把这些数字写出来找下规律,每个数由一个数字构成的数有9个,每个数由2个数字构成的数有90个,每个数由3个数字构成的数有900个,每个数由n个数字构成的数有9*10n-1个。我们首先要找出第n个数字落在几位数上,然后找到具体落在哪个数上,然后找到落到这个数的第几位上,最后锁定是哪一个数字。每一步都需要细心耐心。
class Solution {
public:
int findNthDigit(int m) {
int digit=1,flag;
long c=1, target=0, n=m;
//求出数字n落在digit位数上
while(n>0)
{
n-=c*digit*9;
digit++;
c*=10;
}
//求出数字n是digit位数的第几个数字
n+=(--digit)*(c/10)*9;
//求出数字n是落在哪一个数上
target=(n-1)/digit+c/10; //
//求出数字n是落在target左数第flag个数字上
flag=(n-1)%digit+1;
//求出target的右数第digit-flag+1数字
return target/(int)pow(10,digit-flag)%10;
}
};
照顾好自己的身体,控制好自己的情绪,加油!
以上就是关关关于这道题的总结经验,希望大家能够理解,有什么问题可以在我们的专知公众号平台上交流或者加我们的QQ专知-人工智能交流群 426491390,也可以加入专知——Leetcode刷题交流群(请先加微信小助手weixinhao: Rancho_Fang)。 同时请,关注我们的公众号,获取最新关于专知以及人工智能的资讯、技术、算法等内容。扫一扫下方关注我们的微信公众号。