前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关关的刷题日记90 – Leetcode 400. Nth Digit

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

作者头像
WZEARW
发布2018-04-12 17:44:10
8210
发布2018-04-12 17:44:10
举报
文章被收录于专栏:专知专知

关关的刷题日记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个数字落在几位数上,然后找到具体落在哪个数上,然后找到落到这个数的第几位上,最后锁定是哪一个数字。每一步都需要细心耐心。

代码语言:javascript
复制
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)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 专知 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档