本文主要是介绍LeetCode-400. Nth Digit,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题:https://leetcode.com/problems/nth-digit/?tab=Description
Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
**分析:**S1=1 S2=12 S3=123 S4=1234 … S9=123456789 S10=12345678910
S11=1234567891011 … 求在S串中的第N个数字是多少。
一位数有9个,两位数有90个,三位数有900个。。。所以对于给定的一个数,先看它落在几位数的范围内,再找到具体落在哪个数字上,落在哪个数字的哪一位上。例如n=140,因为一位数有9个,可以位数加1,n-9=131。两位有90个,2*90=180>131,所以目标数字是两位的。10+(131-1)/2=75,落在75上。(131-1)%2=0,落在75的第0位,即7。如此得到。
C++代码:
class Solution {
public:int findNthDigit(int n) {long digit = 1, ith = 1, base = 9; while(n > base*digit) { n -= base*(digit++); ith += base; base *= 10; } return to_string(ith+(n-1)/digit)[(n-1)%digit]-'0';}
};
这篇关于LeetCode-400. Nth Digit的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!