zoukankan      html  css  js  c++  java
  • 400. 第 N 位数字

    在无限的整数序列 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]
  • 相关阅读:
    Java Web的web.xml文件作用及基本配置(转)
    Java Web的传值汇总(含JavaBean)
    路径前面的符号意思(~/,./,../,/)
    MySQL的insert语句的区别
    Linux 安全
    拇指玩」制作的「谷歌安装器」app
    经典角色权限系统设计五张表及拓展应用
    MySQL用户和权限管理
    【基于url权限管理 shiro(一)】--基础
    android图片文件的路径地址与Uri的相互转换
  • 原文地址:https://www.cnblogs.com/xxxsans/p/14416449.html
Copyright © 2011-2022 走看看