题解 | #数字序列中某一位的数字#

数字序列中某一位的数字

https://www.nowcoder.com/practice/29311ff7404d44e0b07077f4201418f5

class Solution {
public:
    int findNthDigit(int n) {
        // write code here
        if(n < 10) return n;    // 个数小于10时候,就是当前字符序号
        long long start = 1;          // 一位数时,开始第一个数字为1,注意使用long long类型,否则容易越界
        long long sum = 9;            // 一位数时,总数为9个,注意使用long long类型,否则容易越界
        int num = 1;            // 表示位数为1
        // int value = n;
        while (n > sum) {       // 迭代到最接近位数区间
            n -= sum;           // 将前面位数区间的元素组合的数字个数剔除
            num++;              // 位数
            start*= 10;         // 更新下一位数时开始的数值        
            sum = num * start * 9;  // 统计下一位数区间的字符个数
        }
        int value = start + (n-1)/num;  // 算一下是哪个数
        int id = (n-1)%num;             // 求余运算,求得数值的第几位
        return to_string(value)[id]-'0';    // 把这个数的对应位置字符恢复数值返回
    }
};

挤挤刷刷! 文章被收录于专栏

记录coding过程

全部评论

相关推荐

今天 13:43
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务