• 数字序列中某一位的数字


    思路一:找规律
    我们通过观察,可以发现以下规律:
    
    
    
    对于第 n 位对应的数字,我们令这个数字对应的数为 target,然后分三步进行。
    
    首先找到这个数字对应的数是几位数,用 digits 表示;
    然后确定这个对应的数的数值 target;
    最后确定返回值是 target 中的哪个数字。
    举个栗子:
    
    比如输入的 n 是 365:
    
    经过第一步计算我们可以得到第 365 个数字表示的数是三位数,n=365-9-90	imes2=176n=365−9−90×2=176,digtis = 3。这时 n=176n=176 表示目标数字是三位数中的第 176176 个数字。
    
    我们设目标数字所在的数为 number,计算得到 number=100+176/3=158number=100+176/3=158,idx 是目标数字在 number 中的索引,如果 idx = 0,表示目标数字是 number 中的最后一个数字。
    
    根据步骤2,我们可以计算得到 idx = n % digits = 176 % 3 = 2,说明目标数字应该是 number = 158 中的第二个数字,即输出为 5。
    class Solution {
        public int findNthDigit(int n) {
            int digit = 1;
            long start = 1;
            long count = 9;
            while (n > count) { // 1.
                n -= count;
                digit += 1;
                start *= 10;
                count = digit * start * 9;
            }
            long num = start + (n - 1) / digit; // 2.
            return Long.toString(num).charAt((n - 1) % digit) - '0'; // 3.
        }
    
    }
  • 相关阅读:
    李时珍的皮肤衣【快速幂】
    ClickHouse深度解析
    Hadoop&HDFS知识点整理
    实时日志数据写入Clickhouse
    Kafka consumer Job异常重置offset
    Flink WaterMark原理与实现
    Spark定期合并Hive表小文件
    Flink 1.11 Table & SQL深度解读
    Docker 安装Elasticsearch、Kibana实战——避免踩坑
    Flink 异步IO实践
  • 原文地址:https://www.cnblogs.com/jieyi/p/14314087.html
Copyright © 2020-2023  润新知