ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

400. 第 N 位数字

2021-02-19 16:02:10  阅读:146  来源: 互联网

标签:10 digit 数字 level int number numbers 400


在无限的整数序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...中找到第 n 位数字。

 

注意:n 是正数且在 32 位整数范围内(n < 231)。

 

示例 1:

输入:3
输出:3

示例 2:

输入:11
输出:0
解释:第 11 位数字在序列 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... 里是 0 ,它是 10 的一部分。

Java
class Solution {
    public int findNthDigit(int n) {
        int level=1;//The level of numbers, we start from one.
        long numbers=9;//The number of current digital levels, we start with a number, there are 9 numbers (1-9), it is a single number

        //Number [1-9] (with 9 digits) is a one-digit number, and the number [10-99] (with 90 digits) is a two-digit number.
        //The number [100-999] (with 900 numbers) is three digits, first we should find what level
        //(I mean which number (one digit, two digits, etc.) the nth digit), once we find the number level,
        //We have already implemented half of the process. If the n-digit * count > 0, it means that the nth bit is not at the current digital level.
        //We should increase the number level to pass more numbers

        while(n-level*numbers>0){
            //Every time we pass numbers at the current number level
            n-=level*numbers;
            level++;
            // The count grows as follows, 9, 90, 900, 9000 ..... because the count may overflow, so I use the long type
            numbers*=10;
        }
        // After the loop, n represents the nth number of the current baseNumber
        //The base is 1, 10, 100, 1000, 10000, etc.
        int baseNumber=(int)Math.pow(10,level-1);
        // find the number where the nth digit is located
        int number=(n-1)/level+baseNumber;
        // Find the number with the nth digit above it
        int mod=(n-1)%level;
        return String.valueOf(number).charAt(mod)-'0';
    }
}

 

 cpp

class Solution {
public:
    int findNthDigit(int n) {
        int level=1;
        long numbers=9;
        while(n-level*numbers>0){
            n-=level*numbers;
            level++;
            numbers*=10;
        }
        int baseNumber=pow(10,level-1);
        int number=(n-1)/level+baseNumber;
        int mod=(n-1)%level;
        return std::to_string(number)[mod]-'0';
    }
};

py

class Solution:
    def findNthDigit(self, n: int) -> int:
        level=1
        numbers=9
        while n-level*numbers>0:
            n-=level*numbers
            level+=1
            numbers*=10
        baseNumber=10**(level-1)
        number=(n-1)/level+baseNumber
        mod=(n-1)%level
        return str(number)[mod]

 

标签:10,digit,数字,level,int,number,numbers,400
来源: https://www.cnblogs.com/xxxsans/p/14416449.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有