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

数字序列中某一位的数字

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过程

全部评论

相关推荐

07-18 18:45
已编辑
中山职业技术学院 Java
投递TP-LINK等公司8个岗位
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
07-02 10:39
门头沟学院 Java
Steven267:说点真实的,都要秋招了,还没有实习,早干嘛去了,本来学历就差,现在知道急了,而且你这个简历完全可以写成一页,劣势太大了,建议转测试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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