leetcode 400. Nth Digit 第n个数字是什么

来源:互联网 发布:女生性格 知乎 编辑:程序博客网 时间:2024/04/27 20:31

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.

题意很简单,直接使用字符串来做肯定超时,但是我还是喜欢这种方法

代码如下:

#include <iostream>#include <vector>#include <map>#include <set>#include <queue>#include <stack>#include <string>#include <climits>#include <algorithm>#include <sstream>using namespace std;class Solution {public:    int findNthDigit(int n)     {        string res = "";        for (int i = 1; i <= n; i++)        {            res += to_string(i);            if (res.length() >= n)                return (res[n - 1] - '0');        }    }};

下面是网上的一个教程的做法,很麻烦,我还是选择上面简单的做法

代码如下:

#include <iostream>#include <vector>#include <map>#include <set>#include <queue>#include <stack>#include <string>#include <climits>#include <algorithm>#include <sstream>using namespace std;class Solution{public:    int findNthDigit(int n)    {        // step 1. calculate how many digits the number has.        long base = 9, digits = 1;        while (n - base * digits > 0)        {            n -= base * digits;            base *= 10;            digits++;        }        // step 2. calculate what the number is.        int index = n % digits;        if (index == 0)            index = digits;        long num = 1;        for (int i = 1; i < digits; i++)            num *= 10;        num += (index == digits) ? n / digits - 1 : n / digits;;        // step 3. find out which digit in the number is we wanted.        for (int i = index; i < digits; i++)            num /= 10;        return num % 10;    }};