leetcode-华为专题-400. 第 N 位数字_leetcode

 

class Solution {
public:
    /*
    小于10,1~9,9个数字,9位
    小于100,10~99,90个数字,180位
    小于1000,100~999,900个数字,2700位
    */
    int findNthDigit(int n) {
    long digit = 1;  // 用来记录n属于几位数
    long base = 9;
    if(n<=9)
    return n;
    while(n-base*digit>0){  
        n = n - base*digit;
        base = base * 10;
        digit++;
    }
    // while循环执行完已经找到n是属于几位数。即digit的值
    // whilie循环完以后n的值

    int num = pow(10,(digit-1))+n/digit;  // 找到所在数字

    int bitcnt = n%digit; // 找到所在数字第几位

    if(bitcnt==0){  // 如果bitcnt 等于0,说明在上一个num的末尾
        string s = to_string(num-1);
        return s[s.size()-1]-'0';
    }else{         // 不等于0的情况
        string s = to_string(num);
        return s[bitcnt-1]-'0';
    }

    }
};