关关的刷题日记 90 – Leetcode 400.Nth Digit

关关的刷题日记90 – Leetcode 400.Nth Digit

题目

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)。 同时请,关注我们的公众号,获取最新关于专知以及人工智能的资讯、技术、算法等内容。扫一扫下方关注我们的微信公众号。

图片

展开全文
相关主题
Top
微信扫码咨询专知VIP会员