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

数字序列中某一位的数字

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

#include <string>
class Solution {
public:
    int findNthDigit(int n) {
        if (n < 10) return n;
        int start = 1;
        int end = 10;
        long long bit = 1;

        // 小于10的数字一位数,1~9,共9个数字,9位;
        // 小于100的数字两位数,10~99,共90个数字,180位;
        // 小于1000的数字三位数,100~999,共900个数字,2700位;
        
        // 定位区间
        while ((long long) n >= (end - start)*bit) {
            // 减之前位数
            n -= (end - start) * bit;  
            // 更新区间头尾
            start *= 10;
            end *= 10;
            bit++;
        }
        // 0123456789 10 11 12 13 14 15
        // (n-1) / bit 是定位到第几个数,bit是这个范围内的整数长度
        // (n-1) % bit 是定位到这个整数上的在长度上的第几个
        string res = to_string(start + (n-1)/bit);
        return res[(n - 1) % bit] - '0';
    }
};

2023-剑指-搜索算法 文章被收录于专栏

2023-剑指-搜索算法

全部评论

相关推荐

牛客583549203号:腾讯还好,况且实习而已,实习生流动性很大,属于正常现象,记得和HR委婉解释
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务